Выполнение запроса HTTP POST с использованием Arduino

Я пытаюсь опубликовать информацию в API в веб-проекте, который я создал и разместил. Я не уверен, какой именно формат предназначен для запроса HTTP POST. Каждый раз, когда я пытаюсь, я получаю ошибки HTTP 400 с сообщением о наличии "недопустимого глагола".

Пример кода:

byte server[] = {"our IP"}
..
..

client(server, 80)
..
..
client.println("POST /Api/AddParking/3");

Он подключается к предоставленному IP-адресу без каких-либо проблем, но все возвращается в вышеупомянутый код ошибки HTTP 400. Я не уверен, должен ли я включать HTTP-версию после моего POST или Content-Length или любую другую информацию.

Ответы

Ответ 1

Оригинальный вопрос уже дан, но только для справки для людей, проходящих через Google; вот более полный пример того, как отправлять данные на веб-сервер с помощью 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);
}

Ответ 2

Отправка обработанных вручную HTTP-пакетов может быть немного сложной, потому что они чрезвычайно разборчивы в отношении используемого формата. Я настоятельно рекомендую читать через HTTP-протокол, если у вас есть время, потому что он объясняет синтаксис и требуемые поля. В частности, вы должны посмотреть раздел 5 "Запрос".

Что касается вашего кода, вам нужно указать версию HTTP после URI POST, и я считаю, что вам также нужно указать заголовок "Host". Кроме того, вы должны быть уверены, что в конце каждой строки есть линия возврата каретки (CRLF). Итак, ваш пакет должен выглядеть примерно так:

POST /Api/AddParking/3 HTTP/1.1
Host: www.yourhost.com

Ответ 3

Запросы тоже можно отправлять

 // 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

}