Python urllib.urlopen() 在浏览器可接受的URL上不起作用

1 投票
3 回答
2051 浏览
提问于 2025-04-15 13:53

如果我在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 个回答

-2

我觉得你没有做错什么——看起来这个服务器只是暂时出了点问题?你的脚本在我这儿运行得很好('text'里包含的数据和浏览器里显示的一样)。

3

你并没有做错什么,表面上看起来是这样。正如错误页面所说的,你应该联系网站的管理员,因为他们有服务器的日志,可以帮助解释发生了什么。幸运的是,Bitbucket的网站管理员们都很友好!

很可能是某些请求头或者头的组合在浏览器和urllib中设置得不一样,这导致了服务器出现了问题。你可以使用Firefox中的Firebug工具,查看到底发送了哪些请求头,然后尝试复现这些请求,直到找到具体的服务器问题。最有可能的问题是用户代理或者某个类似“接受”的请求头引发了这个bug。

3

你并没有做错什么,bitbucket会进行一些用户代理检测(比如用来识别mercurial客户端)。只要更改用户代理就能解决这个问题(只要里面不包含urllib这个字样)。

你应该就这个问题提交一个反馈:http://bitbucket.org/jespern/bitbucket/issues/new/

撰写回答