ESP8266 Ошибка неверного запроса 400

#include <ESP8266WiFi.h>

const char* ssid     =  "Tonosh";
const char* password =  "a43056043";

const char* host     =  "192.168.8.107";


void setup() 
{
  Serial.begin(115200);
  delay(10);

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid,password);

  while(WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP Address: ");
  Serial.println(WiFi.localIP());


}

int value = 0;

void loop() 
{
  delay(2000);
  ++value;

  Serial.print("Connecting to ");
  Serial.println(host);


  WiFiClient client;
  const int httpPort = 80;
  if(!client.connect(host,httpPort))
  {
    Serial.println("Connection failed");
    return;
  }


  String url = "http://192.168.8.107/prueba.php";

  String data = "serie=777&temp=33";


  Serial.print("Requesting URL:  ");
  Serial.println(url);


  client.print(String("POST ") + url + "HTTP/1.0 \r\n" +
               "Host: " + host + "\r\n" +
               "Accept: *" + "/" + "*\r\n" +
               "Content-Length: " + data.length() + "\r\n" +
               "Content-Type: aplication/x-www-form-urlencoded\r\n" +
               "\r\n" + data
              );
  delay(10);           


  Serial.println("Respond:");

  while(client.available())
  {
    String line = client.readStringUntil('\r');
    Serial.print(line);


    Serial.println("Closing connection");
  }
}

Есть идеи? Я пробовал разные сообщения здесь, и ничего не работает.

, 👍-1

Обсуждение

в строке POST URL-адрес должен быть без протокола и хоста. "POST /prueba.php HTTP/1.0, @Juraj

Большое спасибо, этот простой трюк с выводом на консоль уже помог., @appi


1 ответ


4

Код состояния HTTP 400 означает, что синтаксис вашего запроса недействителен.

Есть хороший способ отладки: сохранить запрос в строке, распечатать ее и передать. Вы очень быстро увидите хотя бы одну из проблем, которые есть в вашем коде.

String request = String("POST ") + url + "HTTP/1.0 \r\n" +
                 "Host: " + host + "\r\n" +
                 "Accept: *" + "/" + "*\r\n" +
                 "Content-Length: " + data.length() + "\r\n" +
                 "Content-Type: aplication/x-www-form-urlencoded\r\n" +
                 "\r\n" + data;
Serial.print(request);
client.print(request);

Запрос в строке POST должен содержать только путь и любые аргументы. Вам также нужен пробел перед HTTP/1.0.

Итак, прямо сейчас вы передаете:

POST http://192.168.8.107/prueba.phpHTTP/1.0

когда вам нужно передать

POST /prueba.php HTTP/1.0
,