我正在开发一个项目,ESP8266在启动时以softAP模式启动。主页显示可用的WiFi网络列表。用户选择其中一个并输入该网络的密码。这将向Web服务器发送HTTP_POST请求,该请求包括SSID,并且所选WiFi网络的密码为JSON列表。但是,当我检查请求的参数数量时,我得到0.服务器正确识别内容类型和内容长度,但它无法识别任何参数。这是/connect
句柄的代码。我也尝试过使用request->args()
。这也不起作用。
server.on("/connect", HTTP_POST, [](AsyncWebServerRequest *request)
{
String argList;
String password;
String key = "ssid";
Serial.println(request->contentType());
Serial.println(request->contentLength());
Serial.print("ArgNum: ");
Serial.println(request->params());
for (int i = 0; i < request->params(); i++)
{
AsyncWebParameter* p = request->getParam(i);
Serial.print(p->name());
Serial.print(": ");
Serial.println(p->value());
}
request->send(200, "text/plain", "SUCCESS");
});
答案 0 :(得分:1)
我必须使用json解析器解析请求体。
server.on("/connect", HTTP_POST, [](AsyncWebServerRequest *request){
request->send(200, "text/plain", "SUCCESS");
}, NULL, onConnectBody);
void onConnectBody(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total)
{
StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(data);
if (!root.success())
{
Serial.println("parseObject() failed");
return;
}
String ssid = root["ssid"];
String password = root["password"];
bool secure = root["secure"];
Serial.print("ssid: ");
Serial.println(ssid);
Serial.print("password: ");
Serial.println(password);
Serial.println(secure);
setNetworkCredentials(ssid, password, secure);
}