Python request.exception.ConnectionError: соединение прервано "BadStatusLine"

Я пытаюсь использовать модуль запросов Python для выдачи команд Http GET для доступа к некоторым API на основе REST. URL-адреса работают на RESTClient, но когда я использую один и тот же URL-адрес в python, я получаю ошибку подключения.

Код, который я пытаюсь выполнить, это:

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

Если я тестирую этот URL-адрес с помощью RESTClient, я получаю код состояния 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("''",
))

Я искал причину проблемы. Возможно, полученный ответ не отформатирован правильно. Есть ли способ справиться с этой проблемой?

Спасибо заранее.

Ответы

Ответ 1

Проблема была связана с URL. Это соединение должно было быть установлено через https, и я использовал http в python script. Отсюда проблема.

Ответ 2

Вы действительно проверили, что получает по проводам? Возможно, вам придется конвертировать словарь в строку 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)