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
有谁知道“Bad Status Line”是什么?
编辑:我为很多服务器试过这个,很多网址和我仍然会收到此错误?
答案 0 :(得分:30)
来自httplib (Python 2)的文档(称为http.client in Python 3):
例外
httplib.
BadStatusLine
:( 例外http.client.
{{1} } 强>:)
BadStatusLine
的子类。如果服务器使用我们不理解的HTTP状态代码进行响应,则引发。
我运行了相同的代码并且没有收到错误:
HTTPException
我想只是仔细检查一切,然后再试一次?
答案 1 :(得分:24)
我最近收到此错误,在包含http请求的方法成功运行一次,然后在第二次调用该方法时抛出此异常(状态代码为空字符串)的情况下(使用不同的方法) URL)。我有调试优势,因为这是调用我自己的REST api,所以我在服务器端进行了一些日志记录,发现请求从未被收到。我最终发现我的URL字符串有一个尾随的换行符。因此,请确保您的网址中没有任何前导或尾随特殊字符。
答案 2 :(得分:9)
Python标准库:httplib (Python 2)(称为http.client in Python 3):
exception httplib.BadStatusLine
HTTPException的子类。如果服务器使用我们不理解的HTTP状态代码进行响应,则引发此错误。
答案 3 :(得分:6)
您使用代理吗?
如果是这样,代理服务器可能拒绝HEAD
个请求。
如果您发出GET
请求,是否会遇到同样的问题?如果GET
有效,我会怀疑你的代理人是否存在代理。
您可以在致电conn.set_debuglevel(1)
之前致电conn.request(...)
,了解更详细的信息。
答案 4 :(得分:5)
我刚发现当我们得到异常httplib.BadStatusLine时,就是当服务器出现故障并且没有发送任何响应时,所以这意味着Web服务器甚至不发送http代码[1]
答案 5 :(得分:3)
我遇到的问题是多个请求,但BadStatusLine仅发生在间隔超过5秒且保持活动超时= 5的请求之间。我仍然不确定为什么BadStatusLine被提升而不是NotConnected。当标头丢失时,似乎连接也默认为5。
在每次请求之前,修复都是conn.connect()
。
答案 6 :(得分:3)
我也遇到过这个问题。 根据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文件中,因此在运行开始时被调用。
答案 7 :(得分:2)
我知道&#34;你应该只使用X&#34;答案是不受欢迎的,但我不得不说,在尝试诊断同样的问题几个小时后,我尝试使用相同的设置Requests并且它完美地工作。在我看来也更容易使用和调试。
答案 8 :(得分:1)
我们没有关于你theurl
字符串中的内容的线索,我不知道你的问题是否已经解决(6年过去了,我希望你早就做到了),所以我只是给你遇到的一个可能的原因,并与后来可能会发现这一点的人分享。
我遇到了一个非常类似的问题,我的代码在某些计算机上运行得很好但有时会引发BadStatusLine
个异常。像鬼一样令人讨厌。
仔细检查了所有可能的情况后,我发现'Content-Length'
组件在我的请求http header
中。在删除组件后,我的代码在所有计算机上运行良好。也许你的theurl
的第一部分包含类似我的东西,这与真正的数据长度相矛盾。
答案 9 :(得分:0)
尝试使用httplib.HTTPConnection访问HTTPS / SSL URL时发现此错误
您应该使用httplib.HTTPSConnection来访问SSL网址。