Making a http POST request using Arduino

后端 未结 4 1337
深忆病人
深忆病人 2020-12-13 02:55

I am trying to post information to an API on a web project that I have created and hosted. I am not sure what the exact format is for the HTTP POST request. Every time I t

相关标签:
4条回答
  • 2020-12-13 03:11

    Another option is using the HTTPClient.h (for the arduino IDE on adafruit's ESP32 feather), which handles https with no effort it seems. I'm including JSON payload also and can successfully send an IFTTT webhook.

      HTTPClient http;
      String url="https://<IPaddress>/testurl";
      String jsondata=(<properly escaped json data here>);
    
      http.begin(url); 
      http.addHeader("Content-Type", "Content-Type: application/json"); 
    
      int httpResponseCode = http.POST(jsondata); //Send the actual POST request
    
      if(httpResponseCode>0){
        String response = http.getString();  //Get the response to the request
        Serial.println(httpResponseCode);   //Print return code
        Serial.println(response);           //Print request answer
      } else {
        Serial.print("Error on sending POST: ");
        Serial.println(httpResponseCode);
    
        http.end();
    
     }
    
    0 讨论(0)
  • 2020-12-13 03:24

    The original question is already answered, but just for reference for people passing by via Google; here is a more complete example how to post data to a webserver with an Arduino:

    IPAddress server(10,0,0,138);
    String PostData = "someDataToPost";
    
    if (client.connect(server, 80)) {
      client.println("POST /Api/AddParking/3 HTTP/1.1");
      client.println("Host: 10.0.0.138");
      client.println("User-Agent: Arduino/1.0");
      client.println("Connection: close");
      client.print("Content-Length: ");
      client.println(PostData.length());
      client.println();
      client.println(PostData);
    }
    
    0 讨论(0)
  • 2020-12-13 03:28

    Sending hand-crafted HTTP packets can be a bit tricky because they are extremely picky about the format used. I highly recommend reading through the HTTP protocol if you have the time because it explains the syntax and fields required. In particular you should look at section 5 "Request".

    With regards to your code, you do need to specify the HTTP version after the POST URI and I believe you also need to specify the "Host" header. On top of that you need to be sure to have a carriage-return line-feed (CRLF) at the end of each line. So, your packet should look something like:

    POST /Api/AddParking/3 HTTP/1.1
    Host: www.yourhost.com
    
    0 讨论(0)
  • 2020-12-13 03:32

    Requests can be sent like that too

     // Check if we are Connected.
     if(WiFi.status()== WL_CONNECTED){   //Check WiFi connection status
        HTTPClient http;    //Declare object of class HTTPClient
    
        http.begin("http://useotools.com/");      //Specify request destination
        http.addHeader("Content-Type", "application/x-www-form-urlencoded", false, true);
        int httpCode = http.POST("type=get_desire_data&"); //Send the request
    
        Serial.println(httpCode);   //Print HTTP return code
        http.writeToStream(&Serial);  // Print the response body
    
    }
    
    0 讨论(0)
提交回复
热议问题