ESP32で動作する非同期Webサーバー「ESPAsyncWebServer」をつかって、GET・POSTされたパラメータを取得する方法を紹介します。argとgetParamsの違いがわかりにくかったので、整理してみました。
クエリパラメータを取得するには?
クエリパラメータとは、
http://<ESP32のIPアドレス>/api?param=hoge
でいうところの?param=hogeのことです。つまり、URL末尾に含まれるパラメータのことを指します。
ESPAsyncWebServerでクエリパラメータを取得するには、getParam()を使用します。
server.on("/test", HTTP_GET, [](AsyncWebServerRequest *request) {
String value=request->getParam("param")->value();
Serial.print(value);
}
http://<ESP32のIPアドレス>/test?param=hoge
にアクセスすると、シリアルコンソールにhogeと表示されます。
このサンプルではGETされたときに取得していますが、HTTP_GETをHTTP_ANYにすれば、POSTやPUTといった他のメソッドでも同様に動作させることができます。
POSTされたパラメータを取得するには?
POSTされたパラメータ(formタグにより送信されたパラメータなど)を取得するには、arg()を使用します。
server.on("/test", HTTP_ANY, [](AsyncWebServerRequest *request) {
String value=request->arg("param");
print(value);
}
/testにデータがPOSTされると、paramの値を取得して、シリアルポートに出力します。
arg()は、application/x-www-form-urlencodedとmultipart/form-dataの両者に対応します。つまり、<form>タグで作成したフォームのデータでも、javascriptのFormDataオブジェクトでも解釈することができます。
POST - HTTP | MDN
HTTP の POST メソッドは、サーバーにデータを送信します。リクエストの本文の型は Content-Type ヘッダーで示されます。
まとめ
ESPAsyncWebServerをつかって、リクエストされたパラメーターを取得する方法を紹介しました。
argとgetParamsの違いがわかりにくいので、注意が必要です。
コメント