2013-03-21 115 views
0

我有一個腳本通過urllib.requesturlopen請求URL,然後獲取它的info()檢查響應頭後中止請求

我不想在收到這些標題後繼續處理請求,所以我現在只是將它保留原樣並忘記它,但這似乎是我將連接打開並且可能服務器正在發送更多,只是被忽略。

如何正確中止請求?

#!/usr/bin/python3 

import urllib.request 

response = urllib.request.urlopen('http://google.co.uk') 
headers = dict(response.info()) 
print(headers) 
# now finished with response, abort??? 
# ... more stuff 

回答

1

我想你想要的是一個HEAD請求。像

>>> import httplib 
>>> c = httplib.HTTPConnection("www.google.co.uk") 
>>> c.request("HEAD", "/index.html") 
>>> r = c.getresponse() 
>>> r.getheaders() 
[('x-xss-protection', '1; mode=block'), ('transfer-encoding', 'chunked'), ('set-cookie', 'PREF=ID=7867b0a5641d5f7b:FF=0:TM=1363882090:LM=1363882090:S=EXLl2JgBqzMKODcq; expires=Sat, 21-Mar-2015 16:08:10 GMT; path=/; domain=.google.co.uk, NID=67=qElAph6eqHyYKbh995ivP4B-21YRDRED4-uRXx0AvC3vLpv0SF1LkdsI2k6Hg1IhsatrVVqWf2slcMCaQsAZwZ89YfU0F1iPVBdt9PC2FItff31oRJ3gvhJVTQLa_RAt; expires=Fri, 20-Sep-2013 16:08:10 GMT; path=/; domain=.google.co.uk; HttpOnly'), ('expires', '-1'), ('server', 'gws'), ('cache-control', 'private, max-age=0'), ('date', 'Thu, 21 Mar 2013 16:08:10 GMT'), ('p3p', 'CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."'), ('content-type', 'text/html; charset=ISO-8859-1'), ('x-frame-options', 'SAMEORIGIN')] 
>>> 

東西從w3.org

HEAD方法是相同,除了以獲得服務器不能 返回消息正文中的響應。 HTTP頭中包含 的元信息響應於HEAD請求應該與響應GET請求發送的信息相同 。此方法可用於獲取有關 請求隱含的實體的元信息,而不會傳輸實體主體本身。此方法是 經常用於測試超文本鏈接的有效性,可訪問性, 和最近的修改。

對於HEAD請求的響應可能是可緩存的,這意味着響應中包含的信息可以用來從該資源更新以前緩存的實體 。如果新字段值 指示高速緩存實體不同於當前實體(因爲 將通過Content-Length,Content-MD5,ETag或Last-Modified中的改變來指示),則高速緩存必須將高速緩存條目陳舊。

+0

謝謝,這是我想要的。我還通過'/ Lib/http/client.py'查看了一下,它看起來像'HTTPResponse'也有一個名爲'close'的方法,它調用'self.fp.close()',我可能決定使用它如果HEAD請求不適用於某些URI。 – 2013-03-22 17:08:10