【问题标题】:wget download a file using secure connectionwget 使用安全连接下载文件
【发布时间】:2014-05-04 12:42:37
【问题描述】:

我想使用 wget 从亚马逊大量下载视频文件。我用于单个文件的代码:

wget \
--no-check-certificate \ 
--no-proxy \
--post-data "AWSAccessKeyId=XXX&Expires=XXX&Signature=XXX" \
https://XXX.s3.amazonaws.com/MyIntroVideo.mp4

我得到ERROR 403: Forbidden. 但如果我只是转到浏览器并粘贴以下网址

https://XXX.s3.amazonaws.com/MyIntroVideo.mp4?AWSAccessKeyId=XXX&Expires=XXX&Signature=XXX

我可以查看和下载视频。我在使用 wget 时做错了什么以及为什么会出现禁止访问错误(与简单地在浏览器中访问此 url 有什么不同)?

更新:我尝试的第一件事是使用相同的 url 传递参数:

wget \
--no-check-certificate \ 
--no-proxy \
https://XXX.s3.amazonaws.com/MyIntroVideo.mp4?AWSAccessKeyId=XXX&Expires=XXX&Signature=XXX

但它也不起作用。

【问题讨论】:

  • 你为什么使用--post-data?那就是在幕后将 GET 请求转换为 POST 请求。您的浏览器请求是 GET。
  • @Joe 我遇到了同样的错误,这是我尝试的第一件事。代码是wget --no-check-certificate url

标签: bash wget


【解决方案1】:

将 URL 放在单引号中:

wget \
--no-check-certificate \ 
--no-proxy \
'https://XXX.s3.amazonaws.com/MyIntroVideo.mp4?AWSAccessKeyId=XXX&Expires=XXX&Signature=XXX'

否则查询参数之间的 & 符号可能会被 shell 解释为命令之间的分隔符,因此 wget 只能看到 AWSAccessKeyId=XXX 而没有签名。

另外一种更简单的方法可能是使用专用的 S3 客户端工具,例如 s3cmd

【讨论】:

  • 你让我开心!非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
相关资源
最近更新 更多