Я использую ESP8266 с Arduino IDE и настроил сервер на порту 200. IP также определяется как 192.168.1.100.server.args() ESP8266 Arduino
ESP8266WebServer server(200);
IPAddress ip(192, 168, 1, 100); //Node static IP
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
server.on("/parseIFTTT", parseIFTTT);
void parseIFTTT() {
String message;
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
Serial.println(message);
Serial.println(server.argName(0));
Serial.println(server.arg(0));
server.send(200, "text/plain", "Success " + message);
}
выполнен для маршрутизации запроса parseIFTT на этот метод parseIFTT().
Я сделал переадресацию портов и использование duckdns для доступа к этому серверу извне. Это мой duckdns адрес
http://xxxxxx.duckdns.org:200/parseIFTTT
Когда я сделать POST с помощью инструмента Почтальон с типом содержимого, как текст/равнина, содержание тела показаны в последовательном мониторе
plain
--body contents--
Но когда тот же запрос сделан из IFTTT, последовательный монитор показывает ничего, кроме простого как пустого. Вначале я чувствовал, что проблема связана с IFTTT. Но это не проблема, поскольку, когда я использую пример WiFiWebServer в Arduino, используя следующий код
String req = client.readString();
Serial.println(req);
client.flush();
Я вижу данные из IFTTT как:
POST /parseIFTTT HTTP/1.1
Content-type: text/plain
host: xxxxxx.duckdns.org:200
content-length: 27
x-newrelic-id: XAMGV15QGwQJVllRDgQ=
x-newrelic-transaction: PxQFA1NbAQQJVwJWA1dSB0YdUFIOFQZOEgEPVA5ZBFYGXAwECFgFAFcUG0MHUwoLBAcDAxVs
Connection: close
{"value":"test data from IFTTT"}
Так что я считаю, что я делаю что-то не так с server.args(). У меня создается впечатление, что server.args() должен предоставить содержимое тела, используемое в POST, будет ли contentType текстовым или открытым или x-www-form-urlencoded.
Я делаю что-то неправильно или с server.args() мы не можем получить данные тела из запроса POST?