单次请求获取HTTP请求内容及响应URL

0 投票
2 回答
6119 浏览
提问于 2025-04-17 15:16

我想知道怎么在一次请求中同时获取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 )

撰写回答