我需要你的帮助。
我希望与REST API通信,该API包含端口号3上的传感器数据。 我有一个Json(POST)请求,可以在像Insomnia这样的REST客户端上完美执行。
我的请求:
{ "header": { "portNumber": 3 }, "data": { "index": 40 } }
但是我无法使其在Python上运行,也无法从传感器中恢复数据。
我的Python代码:
import requests
import json
url = 'http://192.168.1.100/iolink/sickv1' # Address of the OctoPrint Server
header = {'portNumber': '3', 'Content-Type': 'application/json'} #Basic request's header
data = {'index': 40}
def get_sensor_measure():
r = requests.post(url + '/readPort', headers=header, data=data)
print(r.content)
print(r.status_code)
我得到了错误:
b'{"header":{"status":1,"message":"Parsing Failed"}}'
提前谢谢
答案 0 :(得分:0)
您应该在'portNumber': '3'
中传递data
,而不是在header
中传递
header = {'Content-Type': 'application/json'}
data = {'header': {'portNumber': '3'}, 'data': {'index': 40}}
而且正如documentation在他的回答中所述,您需要将data
更改为json
:
r = requests.post(url + '/readPort', headers=header, json=data)
答案 1 :(得分:0)
我的猜测是您使用了错误的字段来传递有效负载。确实不是很明显,但是requests
包期望JSON类型的有效负载与json
字段一起发送,而不与data
字段一起发送,即:
r = requests.post(url + '/readPort', headers=header, json=data)
答案 2 :(得分:0)
进行一些更改(粗体),它可以工作。谢谢
url = 'http://192.168.1.100/iolink/sickv1' # Address of the OctoPrint Server
header = {'Content-Type': 'application/json'} #Basic request's header
**data = {'header': {'portNumber': 3}, 'data': {'index': 40}}**
def get_sensor_measure():
r = requests.post(url + '/readPort', headers=header, json=data)
print(r.content)
print(r.status_code)