ESPAsyncWebServerでパラメータを取得するには?

ESP32

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 ヘッダーで示されます。

getParamはクエリパラメータを取得するための関数!

公式のGitHubには、POSTされたパラメータを取得する関数としてgetParams()が紹介されています。

しかし、この方法でPOSTされたデータを取得することは、基本的にできません。

getParamsは、クエリパラメータの取得に使用される関数です。

クエリパラメータとは、

http://<ESP32のIPアドレス>/api?param=hoge

でいうところの?param=hogeのこと。つまり、URLに含まれるパラメータを取得するための関数です。

getParam()でformタグやFormDataから送信されたボディパラメータを取得することはできませんので、注意してください。ボディパラメータをgetParam()で取得しようとすると、以下のような例外が発生し、ESP32がリセット(再起動)されてしまいます。

Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x40151d6b  PS      : 0x00060a30  A0      : 0x800d6d03  A1      : 0x3ffd0c50
A2      : 0x0000000c  A3      : 0x3ffd0cb8  A4      : 0x00000001  A5      : 0x00000003
A6      : 0x00ff0000  A7      : 0xff000000  A8      : 0x800d6a17  A9      : 0x3ffd0c30
A10     : 0x3ffd0cb8  A11     : 0x3ffd0cb8  A12     : 0x3ffd14e8  A13     : 0x0000ff00
A14     : 0x00ff0000  A15     : 0xff000000  SAR     : 0x00000010  EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000014  LBEG    : 0x400012e5  LEND    : 0x40001309  LCOUNT  : 0x800d6f47

ELF file SHA256: 0000000000000000

Backtrace: 0x40151d6b:0x3ffd0c50 0x400d6d00:0x3ffd0c70 0x400d0f13:0x3ffd0c90 0x400d5871:0x3ffd0d00 0x400d4739:0x3ffd0d40 0x400d47c1:0x3ffd0d90 0x401489c1:0x3ffd0db0 0x40148a3d:0x3ffd0df0 0x401490ee:0x3ffd0e10 0x4008996a:0x3ffd0e40

まとめ

ESPAsyncWebServerをつかって、リクエストされたパラメーターを取得する方法を紹介しました。

argとgetParamsの違いがわかりにくいので、注意が必要です。

コメント

タイトルとURLをコピーしました