Продолжайте получать ошибки HTTP 400 с помощью ESP8266HTTPClient

# #firebase #arduino-esp8266

Вопрос:

Я пытаюсь опубликовать данные по URL-адресу с помощью ESP8266HTTPClient библиотеки, но продолжаю получать 400 ошибок. Я проверил, что могу отправлять сообщения по этому URL-адресу через почтальона, поэтому я не уверен, почему он продолжает терпеть неудачу с этим эскизом.

На выходе получается:

Отправка данных в https://my-project.firebaseio.com/users/MY_USER_ID.json {«отметка времени»:»2021-10-28 14:20:00″,»продолжительность»:»1″}

Код ответа HTTP: 400

Полный код ниже:

 #include lt;ESP8266WiFi.hgt; #include lt;ESP8266HTTPClient.hgt;  // WiFi configuration const char *ssid = "MY_SSID"; const char *password = "MY_PASSWORD";  // Database configuration const String userId = "MY_USER_ID"; const String baseUrl = "https://my-project.firebaseio.com";  void setup() {  delay(1000);  Serial.begin(9600);   Serial.print("Configuring access point...");   WiFi.begin(ssid, password);   while (WiFi.status() != WL_CONNECTED)  {  Serial.print(".");  delay(500);  }   Serial.println("");  Serial.print("Connected to WiFi network with IP Address: ");  Serial.println(WiFi.localIP()); }  bool shouldSendData = true;  void loop() {  if (shouldSendData)  {  Serial.println("Attempting to send data...");   if (WiFi.status() == WL_CONNECTED)  {  WiFiClient client;  HTTPClient http;   String url = baseUrl   "/users/"   userId   ".json";   http.begin(client, url);  http.addHeader("Content-Type", "application/json");   String data = "{"timestamp":"2021-10-28 14:20:00","duration":"1"}";  int httpResponseCode = http.POST(data);   Serial.print("Sending data to ");  Serial.println(url);  Serial.println(data);  Serial.print("HTTP Response code: ");  Serial.println(httpResponseCode);   http.end();  }   else  {  Serial.println("Unable to send data. WiFi is not connected.");  }   shouldSendData = false;  } }  

Комментарии:

1. Я не знаком с программированием ESP8266, но подозреваю, что проблема в том, что ваш клиент не использует TLS. У меня был быстрый поиск в Google, и я думаю, что вы, вероятно, захотите использовать WiFiClientSecure , но, надеюсь, когда-нибудь знакомство с этими библиотеками может дать окончательное решение.

2. Вот оно что! Использование WiFiClientSecure и предоставление ему отпечатка пальца сделали свое дело. Спасибо.

3. Отлично! Имейте в виду, что, несмотря на разумную безопасность, ваш код эффективно «привязан» к этому конкретному сертификату, и когда сертификат сервера будет обновлен, вам также потребуется обновить отпечаток пальца.