Search code examples
apipostarduinoesp8266

POST to REST API from my ESP8266


I've made a REST API and I'd like to do a post request to one of the endpoints from my ESP8266, but I can't manage to do so.

The code inside the loop so far:

HTTPClient http;    //Declare object of class HTTPClient



http.begin("http://localhost:5000/api/users/5b1e82fb8c620238a85646fc/arduinos/5b243dc666c18a2e10eb4097/data");
   http.addHeader("Content-Type", "text/plain");
   http.addHeader("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjViMWU4MmZiOGM2MjAyMzhhODU2NDZmYyIsImlhdCI6MTUyOTEwMTc5MiwiZXhwIjoxNTI5MTE2MTkyfQ.2O6knqriuFoEW9C2JQKRlM3D0DNnzqC7e7gpidy3pWU");
http.end(); 

The problem is that I don't know how to set the body of the request.

It should be a json with a single key called "value". For instance:

{
"value":101
}

Anyone knows how to do it? Also it's probable that I should use the ip instead of "localhost".

Thanks in advance.


Solution

  • Use ArduinoJson Library here. Then you can build your HTTP body.

    StaticJsonBuffer<300> JSONbuffer;   //Declaring static JSON buffer
    JsonObject& JSONencoder = JSONbuffer.createObject();
    
    JSONencoder["value"] = value_var;
    char JSONmessageBuffer[300];
    JSONencoder.prettyPrintTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));
    
    HTTPClient http;    //Declare object of class HTTPClient
    
    http.begin("API end point here");      //Specify request destination
    http.addHeader("Content-Type", "application/json");  //Specify content-type header
    
    int httpCode = http.POST(JSONmessageBuffer);   //Send the request
    String payload = http.getString();                  //Get the response payload
    

    Then use the above sample code to encapsulate JSON and send it to the API endpoint.