Выполнение запроса 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
}