Python urllib.urlopen()调用不适用于浏览器接受的URL

时间:2009-08-26 15:09:58

标签: python urllib bitbucket

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

import urllib

site = 'http://bitbucket.org/tortoisehg/stable/wiki/Home/ReleaseNotes'
req = urllib.urlopen(site)
text = req.read()

我得到以下内容:

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

我做错了什么?

3 个答案:

答案 0 :(得分:3)

从表面上看,你没有做错任何事,并且正如错误页面所说,你应该联系网站的管理员,因为他们是服务器日志,可以解释发生了什么。幸运的是,bitbucket的网站管理员很友好!

毫无疑问,浏览器设置了一种标题或标题组合,urllib设置了另一种方式,服务器上的错误在后一种情况下变得棘手。您可能想要确切地查看正在发送的标头,例如在firefox中使用firebug,并重现那些直到你完全隔离服务器bug;最有可能的是它会成为用户代理或某些“接受”-ish标题,这会使这个bug变得棘手。

答案 1 :(得分:3)

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

您应填写以下问题:http://bitbucket.org/jespern/bitbucket/issues/new/

答案 2 :(得分:-2)

我不认为你做错了什么 - 看起来这个服务器刚刚关闭?你的脚本对我来说很好('text'包含的数据与浏览器中显示的数据相同)。