【问题标题】:Python urllib.urlopen() call doesn't work with a URL that a browser acceptsPython urllib.urlopen() 调用不适用于浏览器接受的 URL
【发布时间】:2009-08-26 15:09:57
【问题描述】:

如果我将 Firefox 指向 http://bitbucket.org/tortoisehg/stable/wiki/Home/ReleaseNotes,我会得到一个 HTML 页面。但是如果我在 Python 中尝试这个:

导入 urllib 网站='http://bitbucket.org/tortoisehg/stable/wiki/Home/ReleaseNotes' req = urllib.urlopen(站点) 文本 = req.read()

我得到以下信息:

500 内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。

我做错了什么?

【问题讨论】:

  • 使用 firefox 插件Tamper data 来查看浏览器到底在做什么。也许你错过了什么。
  • 它对我有用。可能是 bitbucket 的临时问题?
  • @Matthew,你确定它有效吗?当我运行它时,我没有例外,但我得到的 587 字节长的 HTML 确实说“500 内部服务器错误”,就像观察到的 OP 一样。
  • @Alex,刚刚再试一次,我得到了 500 错误。但它之前确实有效。 "500" in text 返回 false,打印它会占满我的控制台的三页。
  • 顺便说一句,你想达到什么目的?你知道 wiki 是可克隆的吗?

标签: python urllib bitbucket


【解决方案1】:

您没有做错任何事,bitbucket 进行了一些用户代理检测(例如检测 mercurial 客户端)。只需 changing the user agent 修复它(如果它没有 urllib 作为子字符串)。

你应该填写一个关于这个的问题:http://bitbucket.org/jespern/bitbucket/issues/new/

【讨论】:

  • 改变用户代理修复它,就像你说的。 TVM。
【解决方案2】:

从表面上看,您没有做错任何事情,正如错误页面所说,您应该联系网站的管理员,因为他们拥有服务器日志,可以解释正在发生的事情。幸运的是,bitbucket 的网站管理员是一群友好的人!

毫无疑问,浏览器会以一种方式设置某些标头或标头组合,而 urllib 会以另一种方式设置,并且在后一种情况下会触发服务器上的错误。您可能希望准确查看正在发送的标头,例如使用 firefox 中的 firebug,并复制它们,直到您完全隔离服务器错误;最有可能的是用户代理或一些“接受”-ish 标头,它正在处理该错误。

【讨论】:

    【解决方案3】:

    我不认为你做错了什么 - 看起来这台服务器刚刚关闭?您的脚本对我来说运行良好(“文本”包含与浏览器中显示的数据相同的数据)。

    【讨论】:

    • 有趣的是,我可以准确地重现 OP 的问题:从任何浏览器我看到一个丰富的页面,从 urllib 看到一个 587 字节的 HTML 结果,它确实说 <title>500 Internal Server Error</title> 等等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多