Hello,
I'm trying to do a POST request using my Arduino ESP32 Devkit V1 board. It communicates with local server on my network. The server API was using JSON format. When I tried it on Postman, it run good, but when I'm using Arduino with the same format the result was "-32700, Parse error" with status code= 500. Maybe there was a mistake in my JSON formatting? Thank you for your kind help!
Screenshot from Postman
Output from serial:
19:15:01.188 -> making POST request
19:15:02.214 -> Status code: 500
19:15:02.214 -> Response: {"result":null,"error":{"code":-32700,"message":"Parse error"},"id":0}
When I tried (testing) to delete the auth password:
19:24:22.606 -> making POST request
19:24:23.636 -> Status code: 401
19:24:23.636 -> Response:
My Code:
#include <ArduinoJson.h>
#include <WiFi.h>
#include <ArduinoHttpClient.h>
#include "secrets.h"
const char wifiSsid[] = SECRET_WIFI_SSID;
const char wifiPass[] = SECRET_WIFI_PASS;
char serverAddress[] = "192.168.19.83"; // server address
int port = 2674;
WiFiClient wifi;
HttpClient client = HttpClient(wifi, serverAddress, port);
int status = WL_IDLE_STATUS;
//String output;
//DynamicJsonDocument doc(1024);
//String postData = "{\"id\":\"\",\"method\":\"getinfo\",\"params\":[]}";
StaticJsonDocument<200> jsonBuffer;
String postData;
void initWiFi()
{
#if defined(ESP8266) || defined(ESP32)
WiFi.mode(WIFI_STA);
#endif
WiFi.begin(wifiSsid, wifiPass);
Serial.print(F("Connecting to WiFi .."));
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(F("\r\nConnected. IP: "));
Serial.println(WiFi.localIP());
}
void createJson()
{
Serial.println("Creating JSON data");
jsonBuffer.clear();
jsonBuffer["id"] ="";
jsonBuffer["method"] = "getinfo";
//jsonBuffer["params"] = [];
jsonBuffer.createNestedArray("params");
//serializeJsonPretty(jsonBuffer, Serial);
serializeJson(jsonBuffer, postData);
Serial.println(postData);
delay(1000);
}
void setup() {
Serial.begin(115200);
Serial.println("JSON SERIALIZE");
delay(1000);
Serial.println("WIFI INIT..");
initWiFi();
Serial.println("Creating JSON Data:");
createJson();
delay(2000);
}
void loop() {
Serial.println("making POST request");
client.beginRequest();
client.post("/");
client.sendBasicAuth("telchainuser", "telchainpas");
client.sendHeader("Content-Type", "application/json");
client.beginBody();
client.print(postData);
client.endRequest();
// read the status code and body of the response
int statusCode = client.responseStatusCode();
String response = client.responseBody();
Serial.print("Status code: ");
Serial.println(statusCode);
Serial.print("Response: ");
Serial.println(response);
Serial.println("Wait five seconds");
delay(5000);
}

