ESP8266WebServer运行时错误,尝试访问发送到服务器的POST或GET请求参数

时间:2019-05-14 13:37:45

标签: post esp8266 httpserver arduino-ide

我正在尝试在Arduino IDE中对NodeMCU(ESP8266)进行编程。我需要从HTML表单获取数据并将其保存到EEPROM。当我尝试访问POST或GET参数时,会出现问题。前两个参数我可以很好地解决。但是当我试图超越这些东西时,我的ESP就会死掉而没有任何调试信息。

我尝试使用不同的请求方法,更改HTML表单,Content-Type和HTML标头。什么都没用。

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>

String html_header = "<html>\
 <meta http-equiv=\"Content-Type\" content=\"application/x-www-form-urlencoded; charset=utf-8\">\
 <head>\
   <title>ESP8266 Settings</title>\
   <style>\
     body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
   </style>\
 </head>";

ESP8266WebServer server(80);
...

void setup(void)
{
...
    server.on("/", handleRoot);
    server.on("/ok", HTTP_POST, handleOk);
    server.begin();
    Serial.println("HTTP server started");
  }


void handleRoot() {
  String str = "";
  str += html_header;
  str += "<body>\
   <form method=\"POST\" action=\"ok\">\
     <input name=\"ssid\"> WIFI Net<br>\
     <input name=\"pswd\"> Password<br>\
     <input name=\"ip0\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
     <input name=\"ip1\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
     <input name=\"ip2\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
     <input name=\"ip3\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" /> Static AP<br />\
     <input name=\"gate0\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
     <input name=\"gate1\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
     <input name=\"gate2\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
     <input name=\"gate3\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" /> Gateway<br />\
     <input name=\"mask0\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
     <input name=\"mask1\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
     <input name=\"mask2\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" />\
     <input name=\"mask3\" type=\"number\" style=\"width:45px\" min=\"0\" max=\"255\" /> IP MASK<br /><br />\
     <input type=\"SUBMIT\" value=\"Save settings\" />\
   </form>\
 </body>\
</html>";
  server.send ( 200, "text/html", str );
}

void handleOk() {
  String ssid_ap;
  String pass_ap;

  String str = "";
  str += html_header;
  str += "<body>";

  EEPROM.begin(111);

  ssid_ap = server.arg("ssid");
  pass_ap = server.arg("pswd");

  Serial.println(ssid_ap);
  Serial.println(pass_ap);

  /* 
  Serial.println(server.arg("ip0"));
  Serial.println(server.arg("ip1"));
  Serial.println(server.arg("ip2"));
  Serial.println(server.arg("ip3")); <======== Anything below this arg
  Serial.println(server.arg("gate0")); <====== kills server
  Serial.println(server.arg("gate1"));
  Serial.println(server.arg("gate2"));
  Serial.println(server.arg("gate3"));
  Serial.println(server.arg("mask0"));
  Serial.println(server.arg("mask1"));
  Serial.println(server.arg("mask2"));
  Serial.println(server.arg("mask3"));
  */
  ...
}

当我将某些东西输出到控制台(在这种情况下是串行端口)时,我希望什么也没看到。但这会关闭整个服务器。我猜我的HTML表单有问题,因此服务器无法正确解析它。或带库本身(ESP8266WebServer)。因为当我尝试获取参数数量时,请求已使用server.args(),服务器也关闭了。

0 个答案:

没有答案