2012-12-13 27 views
3

當我運行下面的代碼:如何處理Python 2.7中的Httperror 303?

url = 'http://www.nytimes.com/2011/11/15/arts/music/new-music-from-caveman-los-campesinos-and-the-fall.html?_r=0' 
try: 
    handle = urllib2.urlopen(url).info()  
except urllib2.HTTPError, e: 
    print(e.code) 

有錯誤,print e.code打印303。 如果我使用Chrome或Firefox請求此網址,它可以正常工作。

任何人都可以幫忙嗎? 謝謝

回答

4

您將需要處理重定向因爲HTTP 303 is a "See Other"響應。其中內容是在將給予您在Location頭的位置:

>>> e.headers['Location'] 
'http://www-nc.nytimes.com/2011/11/15/arts/music/new-music-from-caveman-los-campesinos-and-the-fall.html?=_r=6&' 

現在,採用了當今urllib/urllib2真正應該問的疼痛,你實際上應該做的是使用優秀requests什麼圖書館,它會處理你的一切。

我認爲我們可以說,使用requests是在Python中的HTTP的正確方法:

>>> res = requests.get(url) 
<Response [200]> 
>>> print res.text 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" # And so on 
+1

我想在這裏補充的urllib2被錯誤地決定該重定向NYT做導致一個永久的循環。你可以編寫一個自定義的重定向處理程序來教urllib2如何處理來自NYT的結果,但我認爲使用請求庫實際上會證明整體上更簡單。 –

+0

@GeoffGerrietts確切地說。同樣發生的是,我們重定向到的位置需要登錄。哦,好吧,對於'urllib'這麼多。 –

+0

謝謝托馬斯。請求庫易於使用。 –