2009-02-11 58 views
1

我想从使用Python的S3资源检索HTTP HEAD信息。不幸的是,响应总是返回一个403错误。我使用的代码建议为 here,但不幸的是,这不适用于S3请求。下面是代码(主机和关键细节省略):如何将Python中的HEAD HTTP请求发送到Amazon S3?

>>> import httplib 
>>> conn = httplib.HTTPConnection("www.mybucket.us") 
>>> conn.request("HEAD", "/mykey?myparamterers") 
>>> res = conn.getresponse() 
>>> res.status 
>>> 403 

该请求还发送一个签署期满作为查询字符串的一部分。

我也使用httplib2的但HEAD请求只是挂尝试。

+1

如果用GET代替HEAD,它会工作吗? – phihag 2009-02-11 14:09:48

回答

0

403告诉你发送请求是有效的(不管它是正确的是另一回事),但您没有权限访问请求的网页出于某种原因。至少你知道正在发送一个有效的HTTP请求。

你可以检查服务器日志吗?这可能有助于阐明问题的一些轻......

我不知道的“HEAD”请求要么。你不能使用“GET”或“POST”并自己提取头文件吗?可能是图书馆没有实施“HEAD”......我不确定 - 我通过快速搜索google找到的文档非常不足。

+0

执行HEAD REQUEST的原因是避免执行不必要的GET。如果我在同一网址上进行HTTP GET,我会得到200响应。这应该与HTTP HEAD相同。 – 2009-02-11 13:41:44

0

403 HTTP代码手段被禁止。网站管理员可能会禁用此方法。

尝试远程登录

telnet www.mybucket.us 80 
HEAD http://www.mybucket.us/mykey?myparamterers 
Host: www.mybucket.us 
<ENTER> 
<ENTER> 

,并注意服务器的响应。

或者,你可以在Python代码使用conn.set_debuglevel(1)

2

如果您使用的是已签名的URL,则URL是通过方法(例如HEAD或GET)进行签名的。所以你需要为每种方法使用不同的URL。