单次请求获取HTTP请求内容及响应URL
我想知道怎么在一次请求中同时获取HTTP响应的内容和响应的URL(不是我请求的那个URL)。
为了获取响应内容,我用了:
from urllib2 import Request,urlopen
try:
headers = { 'User-Agent' : 'Mozilla/5.0 (X11; U; Linux i686; en-US;)' }
request = Request(url, data, headers)
print urlopen(request).read()
except Exception, e:
raise Exception(e)
如果我只想要头信息(头信息里会有响应的URL),我用了:
try:
headers = { 'User-Agent' : 'Mozilla/5.0 (X11; U; Linux i686; en-US;)' }
request = Request(url, data, headers)
request.get_method = lambda : 'HEAD'
print urlopen(request).geturl()
except Exception, e:
raise Exception(e)
现在我需要发两次请求才能得到内容和URL。有没有办法在一次请求中同时获取这两样东西?如果我的函数能返回内容和URL作为一个元组,那就更好了。
2 个回答
0
我会把你的代码改成这样。我不明白你为什么要捕捉这个错误,然后又把它抛出来,完全没有处理它。
from urllib2 import Request,urlopen
headers = { 'User-Agent' : 'Mozilla/5.0 (X11; U; Linux i686; en-US;)' }
request = Request(url, data, headers)
request.get_method = lambda : 'GET'
response = urlopen(request)
return response.read(), response.get_url()
如果你确实想捕捉这个错误,应该只把它放在urlopen
这个调用周围。
4
如果你把 urlopen(request)
的结果赋值给一个变量,那么你就可以通过这个变量同时使用两个属性,只用一次请求。
response = urlopen(request)
request_body = response.read()
request_url = response.geturl()
print 'URL: %s\nRequest_Body: %s' % ( request_url, request_body )