From f113b9ebb08f2d08909db933f957d4a8005a0e29 Mon Sep 17 00:00:00 2001 From: Mathieu Carbou Date: Wed, 22 Jan 2025 15:39:46 +0100 Subject: [PATCH] doc: Update example for issue #6 --- examples/SimpleServer/SimpleServer.ino | 21 ++++++++++++++------- src/WebHandlers.cpp | 1 + src/WebRequest.cpp | 1 + src/WebServer.cpp | 2 +- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/examples/SimpleServer/SimpleServer.ino b/examples/SimpleServer/SimpleServer.ino index 5190e058..9464c1c1 100644 --- a/examples/SimpleServer/SimpleServer.ino +++ b/examples/SimpleServer/SimpleServer.ino @@ -183,10 +183,6 @@ const char* SSE_HTLM PROGMEM = R"( )"; -void notFound(AsyncWebServerRequest* request) { - request->send(404, "text/plain", "Not found"); -} - #if __has_include("ArduinoJson.h") AsyncCallbackJsonWebHandler* jsonHandler = new AsyncCallbackJsonWebHandler("/json2"); AsyncCallbackMessagePackWebHandler* msgPackHandler = new AsyncCallbackMessagePackWebHandler("/msgpack2"); @@ -759,10 +755,21 @@ websocat: error running server.addHandler(msgPackHandler); #endif - server.onNotFound(notFound); + // catch any request, and send a 404 Not Found response + // except for /game_log which is handled by onRequestBody + server.onNotFound([](AsyncWebServerRequest* request) { + if (request->url() == "/game_log") + return; // response object already creted by onRequestBody + + request->send(404, "text/plain", "Not found"); + }); + + // https://github.com/ESP32Async/ESPAsyncWebServer/issues/6 + // curl -v -X POST http://192.168.4.1/game_log -H "Content-Type: application/json" -d '{"game": "test"}' + // catch any POST request and send a 200 OK response server.onRequestBody([](AsyncWebServerRequest* request, uint8_t* data, size_t len, size_t index, size_t total) { - if (request->url() == "/game_log" && request->method() == HTTP_GET) { - request->send(200, "text/plain", "Here are the logs..."); + if (request->url() == "/game_log") { + request->send(200, "application/json", "{\"status\":\"OK\"}"); } }); diff --git a/src/WebHandlers.cpp b/src/WebHandlers.cpp index 44a46014..c3efab70 100644 --- a/src/WebHandlers.cpp +++ b/src/WebHandlers.cpp @@ -308,6 +308,7 @@ void AsyncCallbackWebHandler::handleUpload(AsyncWebServerRequest* request, const _onUpload(request, filename, index, data, len, final); } void AsyncCallbackWebHandler::handleBody(AsyncWebServerRequest* request, uint8_t* data, size_t len, size_t index, size_t total) { + // ESP_LOGD("AsyncWebServer", "AsyncCallbackWebHandler::handleBody"); if (_onBody) _onBody(request, data, len, index, total); } \ No newline at end of file diff --git a/src/WebRequest.cpp b/src/WebRequest.cpp index e96ec5f2..5fd39bb4 100644 --- a/src/WebRequest.cpp +++ b/src/WebRequest.cpp @@ -141,6 +141,7 @@ void AsyncWebServerRequest::_onData(void* buf, size_t len) { } } if (!_isPlainPost) { + // ESP_LOGD("AsyncWebServer", "_isPlainPost: %d, _handler: %p", _isPlainPost, _handler); if (_handler) _handler->handleBody(this, (uint8_t*)buf, len, _parsedLength, _contentLength); _parsedLength += len; diff --git a/src/WebServer.cpp b/src/WebServer.cpp index ebf126a2..2442c8a6 100644 --- a/src/WebServer.cpp +++ b/src/WebServer.cpp @@ -153,7 +153,7 @@ void AsyncWebServer::_attachHandler(AsyncWebServerRequest* request) { return; } } - + // ESP_LOGD("AsyncWebServer", "No handler found for %s, using _catchAllHandler pointer: %p", request->url().c_str(), _catchAllHandler); request->setHandler(_catchAllHandler); }