ESP8266WebServer, как анализировать полезную нагрузку Json в POST запросе, размер которой превышает объем оперативной памяти
Мне нужно отправить на сервер nodemcu большой json, который будет больше размера оперативной памяти
Я использую библиотеки esp8266werserver и arduinojson. Я знаю, как использовать arduinojson для анализа огромного ответа json от других серверов, анализируя ответ как поток с помощью response.getstream() . Я могу повторно использовать небольшой статический буфер в стеке для анализа всего json в цикле, который работает очень хорошо.
Но когда я использую nodemcu в качестве сервера, я не могу найти аналогичный метод в ESP8266WebServer, который позволил бы мне обрабатывать ответ json в виде потока. Все, что я могу сделать, это прочитать строковый файл в server.arg("plain"), который может привести к сбою, поскольку строка может стать больше оперативной памяти.
Есть ли быстрый и грязный обходной путь? Я смотрю на источник в parsing.cpp, там есть метод readBytesWithTimeout, который, похоже, отвечает за фактический анализ потока ответов. Мне интересно, могу ли я переопределить эту функцию, чтобы делать то, что мне нужно, но я не знаю, как это сделать.
https://github.com/esp8266/Arduino/blob/master /libraries/ESP8266WebServer/src/Parsing.cpp
@Ho Chung Law, 👍0
1 ответ
Лучший ответ:
Библиотека ESP8266WebServer может обрабатывать только POST-запрос HTML-формы с типом контента application/x-www-form-urlencoded или mulripart/.
Вы можете отправить JSON как составную «загрузку», чтобы сохранить его в файл, но для этого потребуется создать составной формат тела POST.
Если вы хотите обрабатывать POST с типом контента application/json, вы можете создать простой веб-сервер, реализованный с помощью WiFiServer.
- Несколько клиентских серверов через Wi-Fi
- Как получить параметры запроса от ESPAsyncWebServer?
- контент» не захватывается
- Как разрешить междоменные запросы на ESP8266 WebServer
- Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?
- Создание веб-сервера на Wemos D1 mini pro
- Управление реле 5В с помощью Wemos D1 R1
- ESP8266 отправляет веб-страницу клиенту, но html-коды отображаются в браузере вместо веб-страницы
о, я не думал просто использовать WiFiserver. Кажется, хороший обходной путь. Большое спасибо за предложение ., @Ho Chung Law
Но, кстати, чего мне не хватает, если я буду использовать WiFi-сервер вместо веб-сервера Esp8266? Веб-сервер Esp8266 лучше оптимизирован для esp8266? Хотелось бы узнать больше о обмене., @Ho Chung Law
это зависит от того, какую часть функций ESP8266WebServer вы используете. ESP8266WebServer оборачивает WiFiServer только с обработкой HTTP и HTML-форм., @Juraj
Тогда, похоже, мне действительно стоит заняться WiFiserver, большое спасибо за вашу помощь, Юрай., @Ho Chung Law