2012-03-29 82 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