2013-02-08 110 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的電話附近。