2016-12-14 4 views
0

JSON을 ESP8266이있는 Arduino 모듈로 보내려고합니다. 나는 장치가 연결되어야하는 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); 

편집 :

예 : 내가 좋아하는 JSON을 보내는 경우 : 다음

{"pass": "test+test"} 

,이 페이로드를 인쇄 할 때 + 기호가 표시되지 않습니다 (단,이 기호는 ASCII 기호입니다)

요청 (wireshark) :

0 보드

enter image description here

문자 배열 페이 :

enter image description here

답변

2

ESP8266WebServer 라이브러리는 공백 문자에 + 복호화된다.

보내기 전에 JSON 문자열을 URL 인코딩해야합니다.

바닐라 자바 ​​스크립트에서 당신은 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