HTTP POST от Arduino/ESP8266/ESP32 Как отправлять параметры (x-www-form-urlencoded)
EDIT: Спасибо за ответ, также мы выяснили, как это сделать Micropython тоже - я считаю, что сообщество Arduino/ESP8266/ESP32 также уместно поделиться этим.
https://github.com/46elks/46elks -getting-started/blob/master/code-examples/MicroPython/https_post_with_micropython.py
Как включить параметры from, to и message to http.post?
Это правильный способ сделать это? http.POST("'от:+XXXXX','кому:+XXXXX','сообщение:Hej'");
#include <M5StickC.h>
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <HTTPClient.h>
#define USE_SERIAL Serial
WiFiMulti wifiMulti;
void setup() {
USE_SERIAL.begin(115200);
USE_SERIAL.println();
USE_SERIAL.println();
USE_SERIAL.println();
for(uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
}
wifiMulti.addAP("YYYY", "ZZZZZ");
}
void loop() {
// ждем подключения к WiFi
if((wifiMulti.run() == WL_CONNECTED)) {
HTTPClient http;
USE_SERIAL.print("[HTTP] begin...\n");
// настроить трагируемый сервер и URL-адрес
http.begin("https://api.46elks.com/a1/sms");
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
http.setAuthorization("XXXXX", "YYYYYY");
int httpCode = http.POST("'from:+XXXXX','to:+XXXXX','message:Hej'");
USE_SERIAL.print("[HTTP] GET...\n");
// запускаем соединение и отправляем HTTP-заголовок
httpCode = http.GET();
// httpCode будет отрицательным при ошибке
if(httpCode > 0) {
// HTTP-заголовок был отправлен, и заголовок ответа сервера обработан
USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
// файл найден на сервере
if(httpCode == HTTP_CODE_OK) {
String payload = http.getString();
USE_SERIAL.println(payload);
}
} else {
USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
delay(10000);
}
@Rene, 👍0
Обсуждение1 ответ
Лучший ответ:
Какой формат сообщения ожидает сервер?
Когда вы отправляете "x-www-form-urlencoded", это, вероятно, должно выглядеть так:
"from=+XXXXX&to=+XXXXX&message=Hej"
где находятся разные части
"param1=paramValue1¶m2=paramValue2¶m3=paramValue3"
param .... Имя ожидаемого параметра
= .... делит пару параметров
paramValue .... Содержимое/значение параметра
& .... связывает пары параметров
так что в вашем случае
int httpCode = http.POST("from=+XXXXX&to=+XXXXX&message=Hej");
Обратите внимание, что в x-www-form-urlencoded символ «+» используется для кодирования пробела. Если вы имеете в виду буквальное «+», вы должны закодировать его как «%2B»., @Edgar Bonet
Мы с другом разобрались, как это сделать на микропитоне — можно ли мне задать вопрос по этому поводу и ответить на него или как-то выложить сюда? https://github.com/46elks/46elks-getting-started/blob/master/code-examples/MicroPython/https_post_with_micropython.py, @Rene
Поместите ссылку и краткое объяснение в качестве РЕДАКТИРОВАТЬ свой вопрос, таким образом, все вместе и поможет другим. Спасибо., @Codebreaker007
- esp32 http client response только 200 не получил данные после этого
- Минимизируйте размер программы ESP32, подключающейся к Bluetooth-устройству и запрашивающей HTTP-сервер одновременно.
- ESP32 в Arduino-IDE с FS.h и SPIFFS
- Программаторы для этой платы отсутствуют - Программирование ESP32 Cam с помощью Ardunio IDE
- Установка значения float до двух знаков после запятой
- ESP32-CAM первый: 0x8 TG1WDT_SYS_RESET загрузочный цикл
- esp32 Stack canary watchpoint срабатывает
- Проверка размера во флэш-памяти Esp32
чего ожидает сервер? Формат x-www-form-urlencoded: имя=значение&nextname=следующеезначение. поэтому с = в качестве разделителя значений имени и & в качестве разделителя пар имя-значение., @Juraj