【问题标题】:Handling rss redirects with Python/urllib2使用 Python/urllib2 处理 rss 重定向
【发布时间】:2012-04-13 03:18:45
【问题描述】:

对从 RSS 提要获取的文章的链接调用 urrlib2.urlopen 会导致以下错误:

urllib2.HTTPError: HTTP 错误 301: HTTP 服务器返回一个重定向 会导致无限循环的错误。最后 30x 错误信息 是:永久移动

根据文档,urllib2 支持重定向。

在 Java 上,只需调用即可解决问题

HttpURLConnection.setFollowRedirects(true);

如何用 Python 解决?

更新

我遇到问题的链接:

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

【问题讨论】:

  • 重定向默认开启。再次阅读错误信息。要确定这是否是 std-lib 中的错误,您必须提供 URL 以进行检查。请注意,服务器也可以根据发送的用户代理返回不同的内容。
  • 我已经添加了网址。看起来有超过 5 个重定向。但是 Java 无需任何额外的东西(例如用户代理)就可以应对它们。

标签: python redirect urllib2


【解决方案1】:

原来您需要启用 Cookie。页面在首先设置 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()

【讨论】:

    【解决方案2】:

    @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)

    【讨论】:

    • 如果这样实现,后续请求之间是否共享cookiejar? (HTTPCookieProcessor 是为 cookie 使用单例缓存,还是每次都使用新的 cookie jar?)
    猜你喜欢
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2011-02-12
    • 2017-12-29
    • 2020-04-09
    • 2012-12-18
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多