代码之家  ›  专栏  ›  技术社区  ›  Charles Anderson

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

  •  1
  • Charles Anderson  · 技术社区  · 15 年前

    如果我把火狐指向 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 回复  |  直到 15 年前
        1
  •  3
  •   tonfa    15 年前

    您没有做错任何事情,BitBucket会进行一些用户代理检测(例如,检测Mercurial客户机)。只是 changing the user agent 修复它(如果没有 urllib 作为子字符串)。

    您应该填写一个与此相关的问题: http://bitbucket.org/jespern/bitbucket/issues/new/

        2
  •  3
  •   Alex Martelli    15 年前

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

    毫无疑问,有一些头或头的组合是浏览器设置的一种方式,URLLIB设置的另一种方式,在后一种情况下,服务器上的错误会被勾选。你可能想知道到底发送了什么报头,比如火狐中的firebug,然后复制这些报头,直到你完全隔离了服务器错误;最有可能的是用户代理或者一些“接受”的报头,这些报头会勾住这个错误。

        3
  •  -2
  •   Gordon Gustafson    15 年前

    我不认为你做错了什么——看起来这台服务器刚刚坏了?您的脚本对我来说工作得很好(“文本”包含与浏览器中显示的数据相同的数据)。