c - ESP8266 Arduino 请求内容编码

标签 c arduino urlencode esp8266 arduino-esp8266

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

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

来自开发板的字符数组负载:

enter image description here

最佳答案

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

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

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

这也将使您避免潜在的问题,涉及 JSON 中的 ?&=

关于c - ESP8266 Arduino 请求内容编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41148167/

相关文章:

c++ - 在 C++ 中,如何访问多维数组中的值?

c - 如何根据用户输入创建函数?

asp.net-mvc - 通过 URL 重写,反斜杠可以在 URL 中正确编码吗?

html - 是否需要 anchor 元素的 URL 编码 "href"属性?

c - 将用户的输入通过管道传输到 shell 中以运行命令

c - 使用链表的堆栈实现不起作用

c++ - Arduino 中不需要的符号扩展

asp.net - 允许双 URL 编码的请求路径有效

c - 如何修复 .txt 中的 &localtime - C

c - 下面的代码有什么作用?