web-dev-qa-db-ja.com

Python requests.exception.ConnectionError:接続は「BadStatusLine」を中止しました

Python requestsモジュールを使用してHttp GETコマンドを発行して、いくつかのRESTベースのAPIにアクセスします。URLは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("''",
))

問題の原因を探しました。おそらく、受信した応答は正しくフォーマットされていません。この問題を処理する方法はありますか?

前もって感謝します。

25
BajajG

問題はURLにありました。この接続はhttps経由で確立することを意図しており、pythonスクリプトでhttpを使用していました。したがって、問題が発生しました。

28
BajajG

実際に確認しましたが、何が送信されますか?自分で辞書を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)
3
Michael