Python request.get() получает сообщение об ошибке недопустимым
Я пытаюсь сделать простой скрипт на Python для запроса ответов API GET от машин для майнинга биткойнов. Мне нужно запросить определенный ключ JSON и значение {"command":"summary"}. Я буду извлекать данные из полезной нагрузки JSON, полученной с помощью этого, для мониторинга некоторых машин в Zabbix.
Если я отправлю запрос с помощью bash следующим образом:
# echo '{"cmd":"summary"}' | timeout 1.5 nc IPADDRESS PORT
Я получу нужные мне данные и смогу даже обработать их с помощью bash, используя tr, sed и jq...
Однако, если я отправляю запрос с помощью своего скрипта Python, я всегда получаю «недействительное сообщение». Я бы предпочел сделать это с помощью Python, потому что я учусь и могу представить, что моя ошибка довольно глупа. Это код питона.
#!/usr/bin/python3
import sys
import logging
import requests
import json
server = 'http://10.136.132.140:4028'
payload = {
"command":"summary"
}
jsonpayload = json.dumps(payload)
print(payload)
print(jsonpayload)
response = requests.get(server,
jsonpayload
)
print(response.json())
Это не сработает, что бы я ни делал. Я пытался использовать непосредственную полезную нагрузку в качестве параметров для request.get, чтобы отправлять только строку. Ничего не работает. Каждый раз, когда я получаю одно и то же неверное сообщение. Я пробовал набирать response = request.get('http://IPADDRESS:PORT', '{"command":"summary"}') напрямую, любую возможную комбинацию одинарных или двойных кавычек... Ничего не работает.
Я получаю три исключения, когда я это называю. Важными трассировками являются следующие:
http.client.BadStatusLine: STATUS=E,When=1608811559,Code=14,Msg=invalid cmd,Description=whatsminer v1.1
urllib3.exceptions.ProtocolError: ("Соединение прервано", BadStatusLine('STATUS=E,When=1608811559,Code=14,Msg=invalid cmd,Description=whatsminer v1.1'))
поднять ConnectionError(ошибка, запрос = запрос) request.exceptions.ConnectionError: («Соединение прервано», BadStatusLine(«СТАТУС =E, Когда =1608811559, Код =14,Msg= неверный cmd, Описание = whatsminer v1.1») )
Что я здесь делаю неправильно? Заранее спасибо за помощь!
1 ответ
Если вы хотите отправить полезную нагрузку json, попробуйте следующее:
server = '' # server url
payload = {
"command":"summary"
}
response = requests.get(server, json=payload)