Python urllib.urlopen() 在浏览器可接受的URL上不起作用
如果我在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/