Запрос cURL с помощью ESP8266

Я новичок в программировании (ESP8266).
Сейчас я собираю фрагменты кода из разных блогов, чтобы получать(!) push-сообщения (сообщения) от Pushbullet.
Отправка уже отлично работает благодаря: Запрос POST на arduino с ESP8266 с использованием библиотеки WifiESP

Пример 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:

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

Я очень ценю любую идею или решение.


person Tobi    schedule 03.06.2017    source источник
comment
как вы показываете ответ сервера? 13 КБ может быть слишком много для оперативной памяти, в зависимости от того, что еще работает на ESP... Кроме того, вы можете использовать примеры ESP8266HTTPClient вместо неприятного ручного создания пакетов запросов.   -  person dandavis    schedule 06.06.2017


Ответы (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 ...
person gre_gor    schedule 07.06.2017