2009-02-11 55 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。