Сбои MicroPython urequests.post

Я пытаюсь получать уведомления на моем (Android) мобильном устройстве от MCU ESP8266 с MicroPython. По этой причине я подписался на пару онлайн-сервисов, предоставляющих некоторые API-интерфейсы для этой задачи, Pushbullet и Push, и установил соответствующие приложения на своем устройстве.

Вот что я пытаюсь:

Pushbullet:

import json
import urequests

body = "Test Notification"
title = "Pushbullet"
data_sent = {"type": "note", "title": title, "body": body}
API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'

pb_headers = {
    'Authorization': 'Bearer ' + API_KEY, 
    'Content-Type': 'application/json'
}

r = urequests.post(
    'https://api.pushbullet.com/v2/pushes', 
    data=json.dumps(data_sent), 
    headers=pb_headers
)

print(r)

Ошибка:

ssl_handshake_status: -256
Traceback (most recent call last):
  File "<stdin>", line 11, in <module>
  File "urequests.py", line 104, in post
  File "urequests.py", line 56, in request
OSError: [Errno 5] EIO

Выдвинутый:

import json
import urequests

payload = {
  "app_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "app_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "target_type": "app",
  "content": "Remote Mic MCU test from ESP8266"
}

r = urequests.post("https://api.pushed.co/1/push", data=payload)
print(r)

Ошибка:

Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
  File "urequests.py", line 104, in post
  File "urequests.py", line 74, in request
TypeError: object with buffer protocol required

Поиск этих ошибок не приносит мне ничего полезного.

Точно такие же фрагменты кода работают нормально на моем компьютере с Linux (используя requests вместо urequests), но я понимаю, что urequests может иметь некоторые ограничения.

У вас есть подсказка, как это исправить?

2 ответа

Сообщение об исключении предполагает, что вы передаете тип данных, который urequests не ожидает Из моих знаний о том, как работает HTTP POST (см. Стандарт HTTP), я знаю, что он принимает поток октетов, который в Python будет представлен str или же bytes тип. В то время как вы передаете словарь. `

проблема связана с библиотекой urequests, если вы можете вернуться к usocket и закрыть сокет до истечения времени ожидания, тогда все работает нормально. Для урэквестов нужно иметь доску со спирамом.

Другие вопросы по тегам