【问题标题】:Python requests.get() getting error invalid msgPython requests.get() 得到错误无效的消息
【发布时间】:2020-12-24 20:31:53
【问题描述】:

我正在尝试用 Python 编写简单的脚本来请求比特币矿机的 API GET 响应。我需要请求某个 JSON 键和值 {"command":"summary"}。我将从由此获得的 JSON 有效负载中提取数据,以监控 Zabbix 上的一些机器。

如果我像这样使用 bash 发送请求:

# echo '{"cmd":"summary"}' | timeout 1.5 nc IPADDRESS PORT

我会得到我需要的数据,我什至可以使用 tr、sed 和 jq 用 bash 处理它...

但是,如果我使用 Python 脚本发送请求,我总是会收到“无效的消息”。我更愿意用 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())

无论我做什么,这都行不通。我尝试使用直接有效负载作为 requests.get 的参数来仅发送字符串。没有任何效果。每次我得到相同的无效味精。我试过直接输入 response = requests.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: ('Connection aborted.', BadStatusLine('STATUS=E,When=1608811559,Code=14,Msg=invalid cmd,Description=whatsminer v1.1'))

引发连接错误(错误,请求=请求) requests.exceptions.ConnectionError: ('连接中止。', BadStatusLine('STATUS=E,When=1608811559,Code=14,Msg=invalid cmd,Description=whatsminer v1.1'))

我在这里做错了什么? 提前感谢您的帮助!

【问题讨论】:

    标签: python json cgminer


    【解决方案1】:

    如果你想发送一个 json 有效载荷,试试这个:

    server = '' # server url
    payload = {
    "command":"summary"
    }
    response = requests.get(server, json=payload)
    

    【讨论】:

    • 那行不通。我已经试过了。在您发表评论后,我再次尝试。我犯了同样的错误。格式有点问题……我看不懂。
    • 服务器的content-type 是什么?也许不是application/json。您的错误消息说:“连接中止。”。所以也许服务器“不喜欢”你的有效载荷。也许尝试这样的事情:headers = {'Content-type': 'application/json'}requests.get(server, json=payload, headers=headers)
    • 嗨,马克,再次感谢您的帮助!我也试过这个,但无济于事。内容类型应为 application/json。这是一台使用 cgminer 程序的比特币矿工机器,这是我正在调用的 API。有许多程序可以毫无问题地调用此 API……特别有趣的是,我可以使用 netcat 调用 API,只需传递字符串……
    • 我在此处链接文档:requests.readthedocs.io/en/master/user/quickstart/… 您可能将 get/post/put 方法与关键字参数 params/data/json 混为一谈。 get 通常使用 params,post 使用 data 和 json。但是请阅读文档,看看您应该使用什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2016-07-22
    • 2013-10-15
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多