【问题标题】:urllib2 is throwing an error for an url , while it's opening properly in browserurllib2 在浏览器中正确打开时为 url 抛出错误
【发布时间】:2011-07-09 12:54:48
【问题描述】:

我正在尝试像这样通过python打开一个url

  import urllib2
  f = urllib2.urlopen('http://www.futurebazaar.com/Search/laptop')

它抛出以下错误

文件 "C:\Python26\lib\urllib2.py", 第 1134 行,在 do_open r = h.getresponse() 文件“C:\Python26\lib\httplib.py”,行 986,得到响应 response.begin() 文件“C:\Python26\lib\httplib.py”,行 391,在开始 版本、状态、原因 = self._read_status() 文件 “C:\Python26\lib\httplib.py”,行 355,在_read_status raise BadStatusLine(line) httplib.BadStatusLine

但是这个网址是通过浏览器打开的。

【问题讨论】:

  • 你的数据包嗅探器说什么?

标签: python urllib2


【解决方案1】:

网站坏了。如果未提供可选的“Accept”标头,则站点将关闭连接而不响应;这是无效的行为。

解决方法:

import urllib2
req = urllib2.Request('http://www.futurebazaar.com/Search/laptop')
req.add_header('Accept', '*/*')
f = urllib2.urlopen(req)

【讨论】:

  • 我刚刚在我的浏览器中加载了页面并抓取了它发送的 HTTP 标头,将其与 urllib 发送的标头进行比较,然后一次移动一个标头,直到找到破坏页面的标头.
  • 那太好了。再次感谢您帮助我:)
  • 我正在编写一个脚本,使用 Suds 从 Exchange Server 同步联系人,但我一直间歇性地收到此错误。我通常不喜欢弄乱站点包中的任何内容,但是我使用此修复程序修补了 suds http 实现,此后我再也没有看到该错误。也许我会用 suds 提交错误报告。谢谢!
  • 我很快就谈过了。错误又回来了。回到绘图板。
  • 谢谢。这确实是我的问题的正确解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-27
  • 1970-01-01
  • 2016-07-12
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
相关资源
最近更新 更多