2017-10-25 13 views
0

MicroPython을 실행하는 ESP8266 MCU에서 내 (Android) 모바일 장치에 대한 알림을 받으려고합니다. 이러한 이유로 필자는이 작업에 대한 몇 가지 API 인 Pushbullet 및 Pushed를 노출하는 몇 가지 온라인 서비스를 구독하고 장치에 해당 앱을 설치했습니다.MicroPython urequests.post 오류

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 

이러한 오류를 검색해도 아무데도 유용하지 않습니다.

내 리눅스 박스에서 똑같은 코드 스 니펫이 작동합니다 (urequests 대신 requests 사용). 그러나 urequests에는 몇 가지 제한 사항이있을 수 있음을 이해합니다.

이 문제를 해결하는 방법에 대한 힌트가 있습니까?

답변

0

예외 메시지는 urequests이 예상하지 않는 데이터 형식을 전달할 것을 제안합니다. HTTP POST가 어떻게 작동하는지 (HTTP 표준 참조) 내 지식에서, 나는 그것이 옥텟 스트림을 받아 들인다는 것을 알고있다. 파이썬에서는 str 또는 bytes 타입으로 표현 될 것이다. 반면 당신은 사전을 전달합니다. `

+0

Micropython 포럼에서 내가 답변 한 바에 따르면, "Pushbullet"스 니펫의 경우 "Pushbullet"스 니펫에서는 @ https://github.com/micropython/micropython/issues/3389에서 제안하는대로, Micropython 및'urequests' 모듈의 일일 빌드로의 업그레이드 알림을 성공적으로 보냈습니다. – dentex