Dieses Beispiel parst einen HTTP-POST-Request-Body mit ArduinoJson. Ich empfehle, meine HumanESPHTTP-Bibliothek als einfache Server-Bibliothek basierend auf dem ESP-IDF-HTTP-Server zu verwenden.
esp32_http_post_arduinojson.cpp
constexpr size_t JsonParseBufferSize = 2048;
typedef ArduinoJson::StaticJsonDocument JsonParseBuffer;
/**
* This buffer is used to parse /api/configure events
*/
static JsonParseBuffer document;
static const httpd_uri_t configureHandler = {
.uri = "/api/configure",
.method = HTTP_POST,
.handler = [](httpd_req_t *req) {
// POST-Body-Daten in einen neuen Buffer empfangen
char* jsonBody = (char*)malloc(req->content_len + 1);
jsonBody[req->content_len] = '\0'; // NUL-Terminierung [zur Sicherheit]
if(jsonBody == nullptr) {
return SendStatusError(req, "Speicher für JSON-Body konnte nicht zugewiesen werden");
}
int err = httpd_req_recv(req, jsonBody, req->content_len);
if(err != req->content_len) {
free(jsonBody);
return SendStatusError(req, "Request-Body konnte nicht gelesen werden");
}
// Body als JSON parsen
deserializeJson(document, jsonBody, req->content_len);
// TODO: Etwas mit [document] machen
// Aufräumen
free(jsonBody);
return SendStatusOK(req);
}
};welches die folgenden Hilfsfunktionen verwendet:
esp32_http_response_helpers.cpp
esp_err_t SendStatusError(httpd_req_t *request, const char* description) {
httpd_resp_set_type(request, "application/json");
httpd_resp_send_chunk(request, "{\"status\":\"error\", \"error\": \"", HTTPD_RESP_USE_STRLEN);
// HINWEIS: Wir nehmen stillschweigend an, dass description keine Sonderzeichen enthält
httpd_resp_send_chunk(request, description, HTTPD_RESP_USE_STRLEN);
httpd_resp_send_chunk(request, "\"}", HTTPD_RESP_USE_STRLEN);
httpd_resp_send_chunk(request, nullptr, 0); // Fertig
return ESP_OK;
}
esp_err_t SendStatusOK(httpd_req_t *request) {
httpd_resp_set_type(request, "application/json");
httpd_resp_sendstr(request, "{\"status\":\"ok\"}");
return ESP_OK;
}
Ähnliche Beiträge nach Kategorie:
C/C++ ESP8266/ESP32
Wenn dieser Beitrag dir geholfen hat, erwäge, mir einen Kaffee zu spendieren oder per PayPal zu spenden, um die Recherche und Veröffentlichung neuer Beiträge auf TechOverflow zu unterstützen