【发布时间】: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