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

, 👍0


1 ответ


Лучший ответ:

1

Библиотека ESP8266WebServer может обрабатывать только POST-запрос HTML-формы с типом контента application/x-www-form-urlencoded или mulripart/.

Вы можете отправить JSON как составную «загрузку», чтобы сохранить его в файл, но для этого потребуется создать составной формат тела POST.

Если вы хотите обрабатывать POST с типом контента application/json, вы можете создать простой веб-сервер, реализованный с помощью WiFiServer.

,

о, я не думал просто использовать WiFiserver. Кажется, хороший обходной путь. Большое спасибо за предложение ., @Ho Chung Law

Но, кстати, чего мне не хватает, если я буду использовать WiFi-сервер вместо веб-сервера Esp8266? Веб-сервер Esp8266 лучше оптимизирован для esp8266? Хотелось бы узнать больше о обмене., @Ho Chung Law

это зависит от того, какую часть функций ESP8266WebServer вы используете. ESP8266WebServer оборачивает WiFiServer только с обработкой HTTP и HTML-форм., @Juraj

Тогда, похоже, мне действительно стоит заняться WiFiserver, большое спасибо за вашу помощь, Юрай., @Ho Chung Law