Как преобразовать http-запрос в Python? - PullRequest
1 голос
/ 15 января 2020

Мне нужна ваша помощь.

Я ищу связь с REST API, содержащим данные датчика на порту номер 3. У меня есть запрос Json (POST), который отлично работает на клиенте 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"}}'

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 15 января 2020

Полагаю, вы используете неправильное поле для передачи своей полезной нагрузки. Это не совсем очевидно, но пакет requests ожидает, что полезная нагрузка типа JSON будет отправлена ​​с полем json, а не с полем data, то есть:

r = requests.post(url + '/readPort', headers=header, json=data)
0 голосов
/ 15 января 2020

С несколькими изменениями (жирным шрифтом) все работает. Спасибо

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)
0 голосов
/ 15 января 2020

Вы должны передать 'portNumber': '3' в data, а не в header:

header = {'Content-Type': 'application/json'}
data = {'header': {'portNumber': '3'}, 'data': {'index': 40}}

А также как Карл , указанный в его ответе, вам необходимо изменить data на json:

r = requests.post(url + '/readPort', headers=header, json=data)
...