HTTP_POST请求中ESP8266 JSON 参数

ESP8266 JSON Parameters in HTTP_POST Request

本文关键字:ESP8266 JSON 参数 请求 POST HTTP      更新时间:2023-10-16

我正在做一个项目,其中ESP8266在启动时以softAP模式启动。主页显示可用 WiFi 网络的列表。用户选择其中一个并输入该网络的密码。这会向 Web 服务器发送一个HTTP_POST请求,其中包括所选 WiFi 网络的 SSID 和密码 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");
});

我必须使用 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);
}