【问题标题】:Why am I getting this error in python ? (httplib)为什么我在 python 中收到此错误? (httplib)
【发布时间】:2010-12-18 14:01:11
【问题描述】:
if theurl.startswith("http://"): theurl = theurl[7:]
    head = theurl[:theurl.find('/')]
    tail = theurl[theurl.find('/'):]
response_code = 0
import httplib
conn = httplib.HTTPConnection(head)
conn.request("HEAD",tail)
res = conn.getresponse()
response_code = int(res.status)

http://www.garageband.com/mp3cat/.UZCKbS6N4qk/01_Saraenglish.mp3
Traceback (most recent call last):
  File "check_data_404.py", line 51, in <module>
    run()
  File "check_data_404.py", line 35, in run
    res = conn.getresponse()
  File "/usr/lib/python2.6/httplib.py", line 950, in getresponse
    response.begin()
  File "/usr/lib/python2.6/httplib.py", line 390, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python2.6/httplib.py", line 354, in _read_status
    raise BadStatusLine(line)
httplib.BadStatusLine

有人知道“坏状态行”是什么吗?

编辑:我在许多服务器和许多 URL 上都试过这个,但我仍然收到这个错误?

【问题讨论】:

  • 在我的特殊情况下,当我将 Http://... 更改为 Http://... 时,问题就消失了。尝试一下。

标签: python http


【解决方案1】:

来自httplib (Python 2)(称为http.client in Python 3)的文档:

异常httplib.BadStatusLine:(异常http.client.BadStatusLine:)

HTTPException 的子类。

如果服务器以我们不理解的 HTTP 状态代码响应,则引发。

我运行相同的代码并没有收到错误:

>>> theurl = 'http://www.garageband.com/mp3cat/.UZCKbS6N4qk/01_Saraenglish.mp3'
>>> if theurl.startswith("http://"):
...     theurl = theurl[7:]
...     head = theurl[:theurl.find('/')]
...     tail = theurl[theurl.find('/'):]
... 
>>> head
'www.garageband.com'
>>> tail
'/mp3cat/.UZCKbS6N4qk/01_Saraenglish.mp3'
>>> response_code = 0
>>> import httplib
>>> conn = httplib.HTTPConnection(head)
>>> conn.request("HEAD", tail)
>>> res = conn.getresponse()
>>> res.status
302
>>> response_code = int(res.status)

我想只是仔细检查所有内容然后再试一次?

【讨论】:

  • 很奇怪。我将您的代码复制并粘贴到我的 5 个服务器(不同的 IP)中,并得到了错误。
  • 嗯,您是否验证了其他系统内容,例如 DNS 名称解析?另外,您是否被代理(如@mhawke 所问)?这是跨越到系统管理员领域...
  • 在httplib.BadStatusLine的情况下是否可以记录完整的HTTP响应?
【解决方案2】:

Python 标准库:httplib (Python 2)(称为http.client in Python 3):

exception httplib.BadStatusLine
HTTPException 的子类。如果服务器以我们不理解的 HTTP 状态代码响应,则引发。

【讨论】:

    【解决方案3】:

    你在使用代理吗?

    如果是这样,可能是代理服务器拒绝了HEAD 请求。

    如果您发出GET 请求,您会遇到同样的问题吗?如果GET 有效,我怀疑你的方式有代理。

    您可以在致电conn.request(...) 之前致电conn.set_debuglevel(1) 了解更多详情。

    【讨论】:

    • 我在通过学校网络运行时收到此错误,但是当我使用手机时它运行良好。是否有解决方案,因为我需要访问的所有内容都可以在我的浏览器 o.O 中访问?
    • 修复:连接后使用路径而不是尝试从整个 url 请求
    【解决方案4】:

    我最近遇到这个错误,在包含http请求的方法成功运行一次的情况下,然后在第二次调用该方法时抛出了这个异常(状态码为空字符串)(使用不同的网址)。我有一个调试优势,因为这是调用我自己的 REST api,所以我在服务器端做了一些日志记录,发现从未收到请求。我最终发现我的 URL 字符串有一个尾随换行符。因此,请确保您的网址已去除任何前导或尾随特殊字符。

    【讨论】:

    • 太棒了...这为我修复了它...永远不会怀疑换行符会显示这样一个不相关的错误消息。我很幸运,在帖子发布四年后,aarrgh 和我遇到了同样的问题。
    【解决方案5】:

    我遇到的问题是多个请求,但 BadStatusLine 仅发生在间隔超过 5 秒且 Keep-Alive 超时 = 5 的请求之间。我仍然不确定为什么会提出 BadStatusLine 而不是 NotConnected。当标头丢失时,连接似乎也默认为 5。 每次请求之前的修复是conn.connect()

    【讨论】:

      【解决方案6】:

      我刚刚发现当我们得到异常 httplib.BadStatusLine 时,服务器宕机并且没有发送任何响应,所以这意味着 Web 服务器甚至没有发送 http 代码 [1]

      [1]http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

      【讨论】:

      • 对我来说同样的问题。 Ubuntu 驱动器已满。带有服务器的 Docker 容器坏了。必须重新启动才能修复它。
      【解决方案7】:

      我也遇到过这个问题。 根据 GmailAPI(python),它发生在服务器在发送有效响应之前关闭连接时。确实,只有当我的程序在大型数据库上运行时才会发生这种情况。

      def _read_status(self):
          # Initialize with Simple-Response defaults
          line = self.fp.readline(_MAXLINE + 1)
          if len(line) > _MAXLINE:
              raise LineTooLong("header line")
          if self.debuglevel > 0:
              print "reply:", repr(line)
          if not line:
              # Presumably, the server closed the connection before
              # sending a valid response.
              raise BadStatusLine(line)
      

      我的解决方案是将与 gmail 建立连接的所有部分移动到一个函数中。然后,仅在实际发送电子邮件之前调用此函数。在此之前,负责建立连接的部分只是被“抛出”在某个 .py 文件中,因此在运行开始时被调用。

      【讨论】:

        【解决方案8】:

        我知道“你应该只使用 X”的答案是不受欢迎的,但我不得不说,在尝试诊断同样的问题几个小时后,我尝试使用相同的设置 Requests,它运行良好。在我看来也更容易使用和调试。

        【讨论】:

          【解决方案9】:

          我们不知道您的theurl 字符串中的内容,而且我不知道您的问题是否已解决(6 年过去了,我希望您早就解决了),所以我只给您一个我遇到的可能原因并与稍后可能会发现的人分享。

          我遇到了一个非常相似的问题,我的代码在某些计算机上运行良好,但有时会引发BadStatusLine 异常。像鬼一样很烦人。

          在仔细检查了所有可能的情况后,我发现'Content-Length' 组件在我的请求http header 中。 删除组件后,我的代码在所有计算机上运行良好。也许您的theurl 的第一部分包含类似于我的内容,这与真实数据长度相矛盾。

          【讨论】:

            【解决方案10】:

            我在尝试使用 httplib.HTTPConnection 访问 HTTPS/SSL URL 时看到此错误

            您应该使用 httplib.HTTPSConnection 来访问 SSL url。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-09-15
              • 2018-10-08
              • 1970-01-01
              • 2022-01-23
              • 1970-01-01
              • 1970-01-01
              • 2023-01-02
              相关资源
              最近更新 更多