# #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. Отлично! Имейте в виду, что, несмотря на разумную безопасность, ваш код эффективно «привязан» к этому конкретному сертификату, и когда сертификат сервера будет обновлен, вам также потребуется обновить отпечаток пальца.