ESP8266 Arduino请求内容编码

时间:2016-12-14 17:00:09

标签: c arduino urlencode esp8266 arduino-esp8266

我正在尝试将JSON发送到带有ESP8266的Arduino模块。我有一个简单的Web服务器,它等待JSON的SSID和密码,设备必须连接。

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):

enter image description here

来自电路板的Char数组有效负载:

enter image description here

1 个答案:

答案 0 :(得分:2)

ESP8266WebServer库正在将+解码为空格字符。

在发送之前,您需要对JSON字符串进行URL编码。

在vanilla JavaScript中,您需要使用encodeURIComponent 请勿使用encodeURI,因为它不会对+进行编码 无论您使用什么,请确保将+字符编码为%2b

这也可以帮助您避免在JSON中涉及?&=的潜在问题。