Я использую приведенный ниже код в Python на RPI, чтобы делать сообщения JSON
import requests
payload = '{"msg_type":"observation_payload","msg":
{"serial":"FZtank","observations":{"8":{"d":0,"m":"JSON upload
test","t":"1543540780"}}}}'
r = requests.post('https://my.website/api/observations', data =
{'post_wrapper':payload})
print r.text
он производит
{"msg": {"remote_pi": "FZtank", "stored_ids": ["8"]}, "msg_type": "receipt"}
Я подумал, что это не будет слишком сложно сделать то же самоечто-то в микропионе на устройстве pycom
import urequests as requests
payload = '{"msg_type":"observation_payload","msg":
{"serial":"FZtank","observations":{"8":{"d":0,"m":"JSON upload
test","t":"1543540780"}}}}'
r = requests.post('https://my.website/api/observations', data =
{"post_wrapper":payload})
print(r.text)
r.close()
, но оно дает
Traceback (most recent call last):
File "<stdin>", line 12, in <module>
File "/flash/lib/urequests.py", line 115, in post
File "/flash/lib/urequests.py", line 100, in request
File "/flash/lib/urequests.py", line 79, in request
TypeError: object with buffer protocol required
Сообщение типа TypeError означает, что ему нужна строка вместо словаря для данных
, поэтомуЯ пытался
import urequests as requests
payload = '{"post_wrapper":{"msg_type":"observation_payload","msg":
{"serial":"FZtank","observations":{"8":{"d":0,"m":"JSON upload
test","t":"1543540780"}}}}}'
r = requests.post('https://my.website/api/observations', data =payload)
print(r.text)
r.close()
, но это дает
{"msg": {"errorText": "Malformed POST - unable to decode JSON"}, "msg_type":
"error"}
Так что теперь я в замешательстве.Неужели проблема в том, что веб-сайт ожидает, что словарь и микропайтон могут отправлять только строку?
.
Некоторые дополнительные детали: я использую https://github.com/micropython/micropython-lib/blob/master/urequests/urequests.py, но строка 52 изменена сai = usocket.getaddrinfo (хост, порт, 0, usocket.SOCK_STREAM) в ai = usocket.getaddrinfo (хост, порт), потому что он выдавал сообщение об ошибке около 4 аргументов против 2. Если я запускаю
import urequests as requests
payload = '{"post_wrapper":{"msg_type":"observation_payload","msg":
{"serial":"FZtank","observations":{"8":{"d":0,"m":"JSON upload
test","t":"1543540780"}}}}}'
r = requests.post('https://my.website/api/observations', data=payload)
или
import urequests as requests
payload = {"post_wrapper":{"msg_type":"observation_payload","msg":
{"serial":"FZtank","observations":{"8":{"d":0,"m":"JSON upload
test","t":"1543540780"}}}}}
r = requests.post('https://my.website/api/observations', json=payload)
или
import urequests as requests
payload = {"msg_type":"observation_payload","msg":
{"serial":"FZtank","observations":{"8":{"d":0,"m":"JSON upload
test","t":"1543540780"}}}}
r = requests.post('https://my.website/api/observations', json=
{"post_wrapper":payload})
Я получаю тот же результат
{"msg": {"errorText": "Malformed POST - unable to decode JSON"}, "msg_type":
"error"}