Как получить параметры запроса от ESPAsyncWebServer?
Сейчас у меня есть следующий код
server.on("/on", HTTP_POST, [](AsyncWebServerRequest *request) {
Serial.println("ON hit.");
String message;
Serial.println(request->url());
if (request->hasParam("device"))
{
message = request->getParam("device")->value();
}
else
{
message = " not specified";
}
request->send(200, "text/plain", "On, GET: " + message);
Serial.print("Device ");
Serial.println(message);
....
При отправке запроса я получаю сообщение «Устройство не указано».
Я смотрю на request-params(), который возвращает мне количество имеющихся там параметров и возвращает 1. Я записываю это:
server.on("/off", HTTP_POST, [](AsyncWebServerRequest *request) {
Serial.println("OFF hit.");
String message;
int params = request->params();
Serial.printf("%d params sent in\n", params);
for (int i = 0; i < params; i++)
{
AsyncWebParameter *p = request->getParam(i);
if (p->isFile())
{
Serial.printf("_FILE[%s]: %s, size: %u", p->name().c_str(), p->value().c_str(), p->size());
}
else if (p->isPost())
{
Serial.printf("_POST[%s]: %s", p->name().c_str(), p->value().c_str());
}
else
{
Serial.printf("_GET[%s]: %s", p->name().c_str(), p->value().c_str());
}
}
if (request->hasParam("device"))
{
message = request->getParam("device")->value();
}
else
{
message = "not specified";
}
request->send(200, "text/plain", "Off, GET: " + message);
Serial.print("Device ");
Serial.println(message);
и получить результат
1 params sent in
_POST[device]: puddle
Device not specified
Если я попытаюсь сделать что-то вроде request->getParam(0)->value().c_str() Я получаю дамп стека, содержащий кучу шестнадцатеричных значений, понятия не имею, что они означают: но это похоже на большую грубую ошибку.
@rball, 👍3
Обсуждение1 ответ
Лучший ответ:
▲ 3
Для запроса POST hasParam
необходимо знать, хотите ли вы проверить параметры URL или параметры x-www-form-urlencoded
в теле запроса POST. Вторым параметром hasParam
является boolean post
, и он имеет значение по умолчанию false
. Используйте hasParam("device", true)
.
,
@Juraj
Смотрите также:
- Несколько клиентских серверов через Wi-Fi
- контент» не захватывается
- Как разрешить междоменные запросы на ESP8266 WebServer
- Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?
- Создание веб-сервера на Wemos D1 mini pro
- Управление реле 5В с помощью Wemos D1 R1
- ESP8266 отправляет веб-страницу клиенту, но html-коды отображаются в браузере вместо веб-страницы
- Загрузить сайт с SD-карты
попробуйте
hasParam("устройство", true)
, @Jurajобычно параметры предназначены для GET, а POST имеет отдельный интерфейс., @dandavis
@Юрай, вот и все. Хотите дать ответ? Лол, чувствую себя довольно глупо., @rball
на всякий случай кто-нибудь найдет этот фрагмент: В дополнение к @Juraj (правильный) ответ: если вы хотите получить доступ к этому параметру, вам также необходимо сообщить функции, что вам нужны параметры URL:
message = request->getParam("device", true)->value();
, @Dakkar