我正在使用nodemcu创建一个网络服务器。我想通过http请求将值发送到服务器。我已成功创建服务器并在Windows上使用fiddler发出http请求。 在nodemcu方面,我无法解析收到的参数,因为随机字符被添加到每个arg名称和值的开头,如此
Arg no 0 =⸮uname:⸮MyUname
最初我通过创建一个函数来开始工作,在开始时剥离一个字符然后执行匹配。它工作了一段时间,但突然在nodemcu上闪了几个代码之后,字符数增加到2.我意识到我需要找到解决这个问题的可靠方法。
这是我的代码。
ESP8266WebServer server(82);
char *DEFAULT_SSID = "MySSID";
char *DEFAULT_PWD = "MyConnPwd";
void setup() {
startServer(DEFAULT_SSID, DEFAULT_PWD);
}
void loop() {
server.handleClient();
}
void startServer(char *ssid, char *password){
WiFi.softAP(ssid, password);
IPAddress myIP = WiFi.softAPIP();
server.on("/update", updateDeviceConfig);
server.begin();
}
bool updateDeviceConfig(){
if (!server.hasArg("uname") || !server.hasArg("pwd")){ //Check if parameters received
server.send(400, "application/json", "{\"error\" : 0}");
return false;
}
saveConfig(server.arg("uname"), server.arg("pwd"));
return true;
}
updateDeviceConfig()始终返回false。这是我在Windows上向fiddler提出的请求。
POST http://192.168.4.1:82/update?uname=MyUname&pwd=MyPwd HTTP/1.1
User-Agent: Fiddler
Host: 192.168.4.1:82
Content-Length: 0
我使用以下函数打印出args及其值
void handleGenericArgs() { //Handler
String message = "Number of args received:";
message += server.args(); //Get number of parameters
message += "\n"; //Add a new line
for (int i = 0; i < server.args(); i++) {
message += "Arg no " + (String)i + " = "; //Include the current iteration value
message += server.argName(i) + " : "; //Get the name of the parameter
message += server.arg(i) + "\n"; //Get the value of the parameter
}
server.send(200, "text/plain", message); //Response to the HTTP request
}
收到的回复是
收到的参数数量:2 Arg no 0 =⸮⸮uname:⸮⸮MyUname Arg no 1 = ⸮⸮pwd:⸮⸮MyPwd
请求中的每个项目都在开头附加⸮⸮。这是串行监视器的输出。
New client
method: ⸮⸮POST url: /update search: uname=MyUname&pwd=MyPwd
headerName: ⸮⸮User-Agent
headerValue: Fiddler
headerName: ⸮⸮Host
headerValue: 192.168.4.1:82
headerName: ⸮⸮Content-Length
headerValue: 0
:c0 1, 119
args: uname=MyUname&pwd=MyPwd
args count: 2
pos 0=@ 5 &@ 16
arg 0 key: ⸮⸮uname value: ⸮⸮MyUname
pos 17=@ 20 &@ -1
arg 1 key: ⸮⸮pwd value: ⸮⸮MyPwd
args count: 2
Request: /update
Arguments: uname=MyUname&pwd=MyPwd
Handle Details
任何想法可能是什么原因? string.h库中有什么东西搞砸了吗?这个问题真的让我烦恼。在此先感谢您的帮助!