Python requests.exception.ConnectionError:连接中止“BadStatusLine”

时间:2015-02-17 08:18:23

标签: python http http-headers

我正在尝试使用Python请求模块发出Http GET命令来访问一些基于REST的API。网址在RESTClient上正常工作但是当我在python中使用相同的url时,我收到连接错误。

我要执行的代码是:

payload={"mac":new_mac,"token":token}
userloginurl="http://192.168.1.40:9119/uid"
r=requests.get(userloginurl,params=payload)
print(r.url)

如果我使用RESTClient测试此url,我会在响应标头中获得200 OK状态代码以及更多字段。 enter image description here  但这不适用于python请求。错误的回溯如下所示:

Traceback (most recent call last):
File "getAPids.py", line 34, in <module>
r=requests.get(userloginurl,params=payload)
  File "C:\Users\garvitab\python\lib\site-packages\requests\api.py", line 65, in
 get
return request('get', url, **kwargs)
File "C:\Users\garvitab\python\lib\site-packages\requests\api.py", line 49, in
request
response = session.request(method=method, url=url, **kwargs)
File "C:\Users\garvitab\python\lib\site-packages\requests\sessions.py", line 4
61, in request
resp = self.send(prep, **send_kwargs)
File "C:\Users\garvitab\python\lib\site-packages\requests\sessions.py", line 5
73, in send
r = adapter.send(request, **kwargs)
 File "C:\Users\garvitab\python\lib\site-packages\requests\adapters.py", line 4
15, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",
))

我抬头查找问题的原因。可能,收到的响应格式不正确。有办法解决这个问题吗?

提前致谢。

3 个答案:

答案 0 :(得分:25)

问题在于网址。这个连接是建立在https上的,我在python脚本中使用了http。因此问题。

答案 1 :(得分:3)

你真的检查过,通过网络发送了什么?我想您可能需要自己将字典转换为JSON字符串,或使用json=关键字而不是payload=。有关详细信息,请参阅http://docs.python-requests.org/en/latest/user/quickstart/#custom-headers。这可以解决问题:

import json
payload = json.dumps({"mac":new_mac,"token":token})
userloginurl = "http://192.168.1.40:9119/uid"
r = requests.get(userloginurl, data=payload)
print(r.url)

答案 2 :(得分:0)

我遇到了同样的错误并花了几个小时来解决它。我发现您无法使用“Localhost”在客户端中调用 Flask 服务器。它必须是“127.0.0.1”

#server
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
   return 'Hello World'

if __name__ == '__main__':
   app.run(debug=True)

现在导致错误的客户端:

#client
import requests
x = requests.get('http://localhost:5000') # change it to 127.0.0.1
print(x.text)