ESP8266 Arduino 请求内容编码
ESP8266 Arduino request content encoding
我正在尝试将 JSON 发送到带有 ESP8266 的 Arduino 模块。我有一个简单的网络服务器,它在设备必须连接的地方等待 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):
来自开发板的字符数组负载:
ESP8266WebServer
库正在将 +
解码为 space 字符。
您需要 URL 编码 JSON 字符串,然后再发送。
在原版中 JavaScript 你需要使用 encodeURIComponent
.
不要使用 encodeURI
,因为它不编码 +
.
无论您使用什么,请确保 +
字符编码为 %2b
.
这也将使您免受潜在问题的困扰,这些问题涉及 JSON.
中的 ?
、&
和 =
我正在尝试将 JSON 发送到带有 ESP8266 的 Arduino 模块。我有一个简单的网络服务器,它在设备必须连接的地方等待 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):
来自开发板的字符数组负载:
ESP8266WebServer
库正在将 +
解码为 space 字符。
您需要 URL 编码 JSON 字符串,然后再发送。
在原版中 JavaScript 你需要使用 encodeURIComponent
.
不要使用 encodeURI
,因为它不编码 +
.
无论您使用什么,请确保 +
字符编码为 %2b
.
这也将使您免受潜在问题的困扰,这些问题涉及 JSON.
中的?
、&
和 =