2016-12-14 20 views
0

Я пытаюсь отправить JSON в модуль Arduino с ESP8266. У меня есть простой веб-сервер, ожидающий JSON с SSID и паролем, где должно быть подключено устройство.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); 

Edit:

Пример: Если я посылаю JSON как:

{"pass": "test+test"} 

Затем, когда я печатаю эту полезную нагрузку Я не получаю знак + (но это знак ASCII)

Запрос (провода):

enter image description here

Char полезная нагрузка массив из платы:

enter image description here

ответ

2

ESP8266WebServer библиотека декодирования + в символ пробела.

Перед отправкой URL-адрес нужно кодировать строку JSON.

В ванильном 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

ok, при кодировании этого json работает отлично, но есть некоторый способ для чтения этих данных с клиента поток соединения с использованием исходных байтов? – kris14an

Смежные вопросы