• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь POST запрос через AT

PerryMZ

New member
Пытаюсь с ардкины сделать POST запрос на instapush.im чтобы отправить push-уведомление. Но что-то не получается. Может подскаажете где в этом говнокоде ошибка?
Код:
            String d0 = "POST /v1/post HTTP/1.1\r\nHost: https://api.instapush.im\r\n";
            String d1 = "x-instapush-appid: yyyyy\r\n";
            String d2 = "x-instapush-appsecret: xxxxxx\r\n";
            String d3 = "Content-Type: application/json\r\n\r\n";
            String d4 = "{\"event\":\"gradus\",\"trackers\":{\"temperature\":\"777\"}}";

            esp8266.println("AT+CIPSTART=\"TCP\",\"104.239.162.182\",80");
            delay(500);

            Serial.print("data to send - ");
            Serial.println(d0.length() +d1.length() + d2.length() + d3.length() + d4.length());
            delay(500);
            esp8266.print("AT+CIPSEND=");
            esp8266.println(d0.length() + d1.length() + d2.length() + d3.length() + d4.length());
            delay(100);
            esp8266.print(d0);
            delay(100);
            esp8266.print(d1);
            delay(100);
            esp8266.print(d2);
            delay(100);
            esp8266.print(d3);
            delay(100);
            esp8266.print(d4);
API сервиса тут - https://instapush.im/developer/rest#send
Еще проблема в том, что я не могу получить ответа, т.к. после передачи данных соединение автоматически закрывается.
 

abdurino

New member
HTTP 1.1 должно "держать" соединение даже после ответа что неудобно.
Всегда используйте HTTP 1.0

Так же полезно установить бесплатный Microsoft Network Monitor чтобы смотреть наши запросы и ответы.

Но тут думаю что-то не так в самом запросе. Вот пример POST
Код:
POST /path/script.cgi HTTP/1.0
From: frog@jmarshall.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

home=Cosby&favorite+flavor=flies
И зачем вам этот POST, не проще ли GET
Код:
GET /somescript.cgi?a=some&r=script HTTP/1.0
 

PerryMZ

New member
Ночь не спал нормально, голова горела в непонятках Подключился к ESP8266 напрямую, чтобы избежать глюков в ардуине. Уточню вопрос:

Итак, я хочу отослать POST запрос чтобы получить PUSH уведомление на телефон. API сайта https://instapush.im/developer/rest#send требует чтобы это было так: (данные в cURL формате)
curl -X POST \
-H "x-instapush-appid: 52d477sb2a4c48a" \
-H "x-instapush-appsecret: 2364eb2s9c3774016fd8" \
-H "Content-Type: application/json" \
-d '{"event":"signups","trackers":{"email":"myemail "}}' \
https://api.instapush.im/v1/post

Мой код в АТ коммандах такой:

Код:
AT+CIPSTART="TCP","instapush.im",80
CONNECT
OK

AT+CIPSEND=278
OK
>

POST /v1/post HTTP/1.1\r\n
Host: api.instapush.im\r\n
x-instapush-appid: XXXXXXXXXXXXX\r\n
x-instapush-appsecret: YYYYYYYYYYYYYYY\r\n
Content-Type: application/json\r\n\
Content - Length: 51\r\n\r\n

{"event":"gradus","trackers":{"temperature":"777"}}

Recv 279 bytes

SEND OK
В результате ничего не приходит. Все переносы в пост запросы сделал для вашего убодства чтения. в оригинале это все выглядит так:
POST /v1/post HTTP/1.1\r\nHost: http://api.instapush.im\r\nx-instapush-appid: 5631188fa4c48a213b4ddbeb\r\nx-instapush-appsecret: 61e60b9812af2f2999a47980d864d91c\r\nContent-Type: application/json\r\n\Content - Length: 51\r\n\r\n{"event":"gradus","trackers":{"temperature":"777"}}
 
Последнее редактирование:

PerryMZ

New member
Я готов разбиться башкой об стену. 3 дня я нормально не спал пытаясь понять НУ ПОЧЕМУ же не работает. В итоге строке "Content - Length:" имеются 2 лишних пробела...... Это писец господа....
 
Сверху Снизу