【问题标题】:Getting 403 Forbidden requesting Amazon S3 file获取 403 禁止请求 Amazon S3 文件
【发布时间】:2017-03-06 05:34:03
【问题描述】:

我想获得 Amazon S3 上文件的大小而无需下载。我的尝试是尝试发送 HTTP HEAD,返回的请求将包含内容长度的 HTTP 标头。

这是我的代码:

import httplib
import urllib
urlPATH = urllib.unquote("/ticket/fakefile.zip?AWSAccessKeyId=AKIAIX44POYZ6RD4KV2A&Expires=1495332764&Signature=swGAc7vqIkFbtrfXjTPmY3Jffew%3D")

conn = httplib.HTTPConnection("cptl.s3.amazonaws.com")
conn.request("HEAD", urlPATH, headers={'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
       'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
       'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
       'Accept-Encoding': 'none',
       'Accept-Language': 'en-US,en;q=0.8',
       'Connection': 'keep-alive'}
)
res = conn.getresponse()
print res.status, res.reason

错误信息是:

403 Forbidden

所以为了转义 URL 中的“%”,我使用了 urllib.unquote,在得到 403 Forbidden 后,我还尝试添加一些标题,因为我认为 Amazon 可能只返回似乎是由浏览器,但我继续收到 403 错误。

这是亚马逊需要特定参数来正确处理 HTTP 请求的情况,还是我的代码不好?

【问题讨论】:

  • 您确定需要额外的报价吗?即使没有它,它也会返回 403 吗?
  • 你指的是什么额外的引用?
  • 对不起,错字,我的意思是urllib.unquote
  • 啊,它仍然在没有取消引用的情况下运行,但症状是一样的。

标签: python


【解决方案1】:

403 Forbidden 温和地指向身份验证问题。您确定您的访问密钥和签名正确吗?

如果有疑问,您可以随时尝试通过Boto3 获取元数据,它会为您处理所有身份验证内容(从您传入的配置文件或数据中提取)。哎呀,如果它有效,您甚至可以打开调试模式并查看它实际发送的有效内容。

【讨论】:

  • 如果我将代码中的 URL 复制并粘贴到网络浏览器中,它可以正常下载。
  • 好的,我可能得试试。谢谢
  • 尝试使用 curl 将复制粘贴到命令行中 - 它的隐藏程度远低于网络浏览器。
【解决方案2】:

好的....我通过使用解决方法找到了解决方案。我最好的猜测是 curl/wget 在对 S3 的请求中缺少 http 标头,因此它们都失败并且浏览器可以正常工作。试图开始分析请求,但没有。

最终,它可以使用以下代码:

import urllib
d = urllib.urlopen("S3URL")
print d.info()['Content-Length']

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2016-09-08
    相关资源
    最近更新 更多