我使用帶有Arduino IDE的ESP8266,並在端口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);
}
已完成將parseIFTTT請求路由到此parseIFTTT()方法。
我已經完成端口轉發並使用duckdns從外部訪問此服務器。 這是我duckdns解決
http://xxxxxx.duckdns.org:200/parseIFTTT
當我使用的內容類型郵遞員工具進行POST text/plain的,正文內容顯示在串行顯示器作爲
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是text/plain還是x-www-form-urlencoded。
我做錯了什麼或與server.args()我們不能從POST請求獲取正文數據嗎?