Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
server.args()ESP8266 Arduino_Arduino_Esp8266_Ifttt - Fatal编程技术网

server.args()ESP8266 Arduino

server.args()ESP8266 Arduino,arduino,esp8266,ifttt,Arduino,Esp8266,Ifttt,我将ESP8266与Arduino IDE一起使用,并在端口200处设置了一个服务器。IP的定义也与192.168.1.100相同 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", parseIF

我将ESP8266与Arduino IDE一起使用,并在端口200处设置了一个服务器。IP的定义也与192.168.1.100相同

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);
}
当我使用内容类型为text/plain的POSTMAN工具发表文章时,正文内容在串行监视器中显示为

plain
--body contents--
但是当同样的请求从IFTTT发出时,串行监视器只显示为空。最初我觉得问题出在IFTTT上。 但这并不是我在arduino中使用WiFiWebServer示例时的问题,使用以下代码

  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"}
因此,我认为我在服务器上做错了什么。args()。我的印象是,server.args()应该给出文章中使用的正文内容,无论contentType是text/plain还是x-www-form-urlencoded


我是做错了还是服务器有问题。args()我们不能从POST请求中获取正文数据吗?

ESP8266Web服务器的实现中存在一些“问题”。我发现尸体出现在房间里

server.arg("plain")
但仅当类找不到任何键值对时。ESP8266Web服务器将查找“=”,只有在找不到时,才会将正文放入“普通”参数

这个参数将包含全文,因此您必须自己解析JSON。我发现这是一个非常容易使用的库

简短示例:

void handleRequest() {  
  StaticJsonBuffer<200> jsonBuffer;
  JsonObject& root = jsonBuffer.parseObject(server.arg("plain"));
  root.printTo(Serial);
}
void handleRequest(){
静态jsonBuffer jsonBuffer;
JsonObject&root=jsonBuffer.parseObject(server.arg(“plain”);
root.printTo(串行);
}
旁注。如果您使用类似邮递员的工具进行测试,请不要忘记设置“内容长度”。如果您的正文与此标题值不一致,ESP8266WebServer将视您的正文为空(或长度不同)

希望这能回答你的问题

void handleRequest() {  
  StaticJsonBuffer<200> jsonBuffer;
  JsonObject& root = jsonBuffer.parseObject(server.arg("plain"));
  root.printTo(Serial);
}