2013-03-21 103 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