2016-12-14 14 views
0

JSONをESP8266のArduinoモジュールに送信しようとしています。私は単純なWebサーバーを持っています.SSLはSSIDとパスワードでJSONを待っていて、デバイスを接続する必要があります。ESP8266 Arduinoはコンテンツのエンコーディングを要求します

ESP8266WebServer server(80); 
server.on("/config", HTTP_POST, configHandle); 
server.begin(); 

void handleConfig() { 
    String payload = server.arg("plain"); 
    //convert JSON to char[] 
    //parse using jsmn lib 
} 

パスワードにASCII以外の文字が含まれる場合はどうなりますか?どのように私は、メソッドにこの引数を置くために要求内容を扱うことができます。

WiFi.begin(ssid, pass); 

編集:

例:私はこのペイロードを印刷するとき、次に

{"pass": "test+test"} 

:私はのようなJSONを送信する場合+記号が付いていません(ただしこれはASCII記号です)

リクエスト(wireshark):

0ボードから

enter image description here

char配列ペイロード:

enter image description here

答えて

2

ESP8266WebServerライブラリは、空白文字に+をデコードしています。

送信する前にJSON文字列をURLエンコードする必要があります。

バニラのJavaScriptでencodeURIComponentを使用する必要があります。
encodeURIは、+をエンコードしないため使用しないでください。
何を使用するにしても、+文字が%2bにエンコードされていることを確認してください。

これにより、JSON内に?,&=という潜在的な問題が発生しないようになります。

+0

JSONは要求ペイロードPOSTメソッドで送信されます。だから、私は本当にURIエンコーディングメソッドを使用してこのコンテンツをエンコードする必要がありますか?なぜライブラリーをスペース文字に変更するのですか? – kris14an

+0

[POSTデータもエンコードする必要があります](https://en.wikipedia.org/wiki/POST_(HTTP)#Use_for_submitting_web_forms) –

+0

このjsonをエンコードすると正常に動作しますが、クライアントからこのデータを読み取る方法です元のバイトを使用して接続ストリーム? – kris14an

関連する問題