2017-06-03 236 views
1

我對編程非常新穎(ESP8266)。
現在我正在將來自不同博客的代碼組合在一起,以便接收來自Pushbullet的(!)推送(消息)。
已經發送的作品十分感謝: POST request on arduino with ESP8266 using WifiESP library使用ESP8266請求cURL

從Pushbullet捲曲的例子是:

curl --header 'Access-Token: <your_access_token_here>' \ 
    --header 'Content-Type: application/json' \ 
    --data-binary '{"body":"Space Elevator, Mars Hyperloop, Space Model S (Model Space?)","title":"Space Travel Ideas","type":"note"}' \ 
    --request POST \ 
    https://api.pushbullet.com/v2/pushes 

和 '平移' 到Arduino的/ ESP8266:

String request = String("POST ") + url +" HTTP/1.1\r\n" + 
        "Host: " + push_bullet_host + "\r\n" + 
        "User-Agent: ESP8266/NodeMCU 0.9\r\n" + 
        "Accept: */*\r\n" + 
        "Content-Type: application/json\r\n" + 
        "Content-Length: "+ body.length() +"\r\n" + 
        "Access-Token: "+ api_token +"\r\n\r\n" + 
        body; 
secure_client.print(req); 

所以我想要什麼現在要做的是從Pushbullet請求最新的消息。
在嫋嫋的例子是:

curl --header 'Access-Token: <your_access_token_here>' \ 
    --data-urlencode active="true" \ 
    --data-urlencode modified_after="1.4e+09" \ 
    --get \ 
    https://api.pushbullet.com/v2/pushes 

而我試圖得到它的工作是:

String request = String("GET ") + url +" HTTP/1.1\r\n" + 
        "Host: " + push_bullet_host + "\r\n" + 
        "User-Agent: ESP8266/NodeMCU 0.9\r\n" + 
        "Accept: */*\r\n" + 
        "active=\"true\"\r\n" + 
        "modified_after=\"1496508764\"\r\n" + 
        "Access-Token: "+ api_token +"\r\n\r\n"; 
    secure_client.print(req); 

但所有我收到如下:

>>HTTP/1.1 200 OK>> 
X-Ratelimit-Reset: 1496515364>> 
Content-Type: application/json; charset=utf-8>> 
X-Ratelimit-Limit: 16384>> 
X-Ratelimit-Remaining: 16384>> 
X-Cloud-Trace-Context: blablalba>> 
Date: Sat, 03 Jun 2017 18:05:06 GMT>> 
Server: Google Frontend>> 
Content-Length: 13626>> 

我非常感謝所有想法或解決方案。

+0

如何你顯示服務器的迴應? 13k對於內存來說可能太多了,這取決於ESP上運行的是什麼......此外,您可以使用ESP8266HTTPClient示例來代替討厭的手動請求數據包構建。 – dandavis

回答

1

active="true"modified_after="1496508764"是無效的頭。
你甚至不希望他們在標題中,因爲他們應該是查詢參數。

您應該將這些參數追加到URL中。

String request = String("GET ") + url +"?active=true&modified_after=1.4e%2B09 HTTP/1.1\r\n" + 
       "Host: " + push_bullet_host + "\r\n" + 
       "User-Agent: ESP8266/NodeMCU 0.9\r\n" + 
       "Accept: */*\r\n" + 
       "Access-Token: "+ api_token +"\r\n\r\n"; 

你可以看到究竟是什麼curl命令發送和接收,如果你運行它-v--verbose選項:

curl --header 'Access-Token: <your_access_token_here>' \ 
    --data-urlencode active="true" \ 
    --data-urlencode modified_after="1.4e+09" \ 
    --get -v\ 
    https://api.pushbullet.com/v2/pushes 

有了這個,你會看到:

* ... TLS stuff ... 
> GET /v2/pushes?active=true&modified_after=1.4e%2B09 HTTP/1.1 
> Host: api.pushbullet.com 
> User-Agent: curl/7.42.1 
> Accept: */* 
> Access-Token: <your_access_token_here> 
> 
< ... Response headers ... 
+0

太棒了!非常感謝。它非常完美! – Tobi