2012-03-29 80 views
14

鏈接到從RSS獲取一篇關於調用urrlib2.urlopen重定向會導致以下錯誤:處理RSS使用Python/urllib2的

urllib2.HTTPError: HTTP Error 301: The HTTP server returned a redirect error tha t would lead to an infinite loop. The last 30x error message was: Moved Permanently

根據該文件,支持的urllib2重定向。

在Java中的問題是由只調用

HttpURLConnection.setFollowRedirects(true);

我如何使用Python解決這個問題解決了嗎?

UPDATE

的聯繫,我有問題:

http://feeds.nytimes.com/click.phdo?i=8cd5af579b320b0bfd695ddcc344d96c

+0

導向是默認。再次閱讀錯誤消息。要確定這是否是std-lib中的錯誤,您必須提供URL以供檢查。請注意,服務器也可以基於發送的用戶代理返回不同的內容。 – sleeplessnerd 2012-03-29 13:14:49

+0

我已添加網址。看起來有超過5個重定向。但是Java沒有像用戶代理那樣的額外的東西來應付它們。 – Alex 2012-03-29 13:15:42

+0

[Python urllib2.urlopen可能重複返回302錯誤,即使頁面存在](http://stackoverflow.com/questions/4098702/python-urllib2-urlopen-returning-302-error-even-though-page-exists) – Krastanov 2016-03-16 23:46:20

回答

25

原來你需要啓用cookies。首先設置cookie後,頁面會自動重定向到自己。由於urllib2默認不處理cookie,因此您必須自己完成。

import urllib2 
import urllib 
from cookielib import CookieJar 

cj = CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
p = opener.open("http://feeds.nytimes.com/click.phdo?i=8cd5af579b320b0bfd695ddcc344d96c") 

print p.read() 
9

沒有錯@ sleeplessnerd的解決方案,但是這是非常,非常輕微更優雅:

import urllib2 
url = "http://stackoverflow.com/questions/9926023/handling-rss-redirects-with-python-urllib2" 
p = urllib2.build_opener(urllib2.HTTPCookieProcessor).open(url) 

print p.read() 

事實上,如果你看一下在線文檔的CookieJar()功能,它更多或稀少告訴你做的事情是這樣的:

You may not need to know about this class: try urllib2.build_opener(HTTPCookieProcessor).open(url)

+0

如果以這種方式實現cookiejar是在後續請求之間共享的? (HTTPCookieProcessor是否使用cookie的單例緩存,或每次使用新的cookie jar?) – owenfi 2014-12-18 21:43:15