2013-02-08 111 views
0

如何在单个请求中获取http响应的内容以及响应url(不是请求的url)。获取http请求的内容以及单个请求中的响应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) 

如果我想只有头(头会有响应的网址),我用

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) 

我做两个请求来获取内容&网址。 我怎样才能在一个请求中获得两个。如果我的函数返回内容&作为元组更好。

+0

我只需要响应url,因为我请求的url可能会重定向到其他页面。 – Garfield 2013-02-08 18:13:43

回答

3

如果您分配了urlopen(request)给一个变量,你可以用一个请求

response = urlopen(request) 
request_body = response.read() 
request_url = response.geturl() 
print 'URL: %s\nRequest_Body: %s' % (request_url, request_body) 
+0

非常感谢! :) – Garfield 2013-02-08 18:25:41

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的电话附近。