I am creating a webserver with the nodemcu. I want to send values to the server through http requests. I have successfully created the server and make http requests using fiddler on windows.
On the nodemcu side, I am unable to parse the arguments recieved because random characters are added to the start of every arg name and value like so
Arg no 0 = ⸮uname : ⸮MyUname
Initially I worked around by creating a function the strips one character at the start and then perform matching. It worked for a while, but suddenly after a few more code flashes on the nodemcu, the number of characters increased to 2. I realized I need to find a solid solution to this problem.
Here is my code.
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() always returns false. Here is the request I make from fiddler on windows.
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
I printed out the args and their values using the following function
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
}
The response received is
Number of args received:2
Arg no 0 = ⸮⸮uname : ⸮⸮MyUname
Arg no 1 = ⸮⸮pwd : ⸮⸮MyPwd
Every item in the request is appended with ⸮⸮ at the start. Here's the output from the serial monitor.
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
Any idea what could be the reason for this? Is there something in the string.h library that is messing things up? This problem is really bugging me. Thanks in advance for the help!