【问题标题】:Request cURL with ESP8266使用 ESP8266 请求 cURL
【发布时间】:2017-06-03 18:07:09
【问题描述】:

我对编程很陌生(ESP8266)。
现在,我将来自不同博客的代码片段放在一起,以便接收(!)来自 Pushbullet 的推送(消息)。
发送已经很有效了,感谢: POST request on arduino with ESP8266 using WifiESP library

Pushbullet 的 cURL 示例是:

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 中的例子是:

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>>

我非常感谢任何想法或解决方案。

【问题讨论】:

  • 如何显示服务器的响应? 13k 对 ram 来说可能太多了,这取决于 ESP 上运行的其他内容......此外,您可以使用 ESP8266HTTPClient 示例而不是讨厌的手动请求数据包构建。

标签: curl arduino esp8266 pushbullet


【解决方案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";

如果您运行-v--verbose 选项,您可以看到curl 命令发送和接收的确切内容:

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 ...

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多