Что не так с моим почтовым запросом?

Я пытался заставить ПОЧТУ работать над моим ESP8266. Я следовал этому уроку https://techtutorialsx.com/2016/07/21/esp8266-post-requests/ который работает, но как только я меняю URL-адрес запроса на что-то еще, я получаю -1 ответ от http.POST (), который библиотека возвращает, когда "нет информации".

Я понятия не имею, что означает "нет информации" и что я делаю не так. У кого-нибудь есть какие-нибудь предложения? Ниже приведен код, который я использую.

if (WiFi.status() == WL_CONNECTED) { //Проверить состояние подключения Wi-Fi
 
    HTTPClient http;    //Объявить объект класса HttpClient
 
    //http.begin("http://192.168.1.88:8085/hello"); //Работает нормально
    //http.begin("https://httpbin.org:8080/post"); //Вызывает -1 как HttpCode
    //http.begin("https://httpbin.org/post"); //Вызывает -1 как HttpCode
    http.begin("https://XXXXX.execute-api.eu-west-2.amazonaws.com/XXXXX/XXXXX);
    http.addHeader("Content-Type", "application/json");  //Указать заголовок content-type
 
    int httpCode = http.POST("{\"key\":\"1\",\"id\": \"ESPXXX2\",\"action\": \"rbg\",\"value\": \"255255000\"}");   //Отправить запрос
    String payload = http.getString(); //Получить полезную нагрузку ответа
 
    Serial.println(httpCode);   //Print HTTP return code
    Serial.println(payload);    //Полезная нагрузка ответа на запрос печати
 
    http.end();  //Закрыть соединение
 
  } else {
 
    Serial.println("Error in WiFi connection");
 
  }
 
  delay(10000);  //Отправка запроса каждые 10 секунд

Только последовательный вывод, который я получаю, - это "-1" для HttpCode и пустая строка для полезной нагрузки.

, 👍0

Обсуждение

Заметили ли вы одну вещь, которая отличается между всеми URL-адресами, которые терпят неудачу, и тем, который работает?, @Majenko

так что попробуйте еще раз http.begin("https://httpbin.org/post"); с http.ПОСТ, @Juraj

@Majenko, ESP8266HTTPClient библиотека поддерживает https, @Juraj

@Juraj Да. *если* ты все правильно настроил..., @Majenko

@Majenko это https, который вызывает проблему? Я попытался следовать другому руководству (https://circuits4you.com/2019/02/08/esp8266-nodemcu-https-secured-post-request/) но все равно не повезло, не могу пройти мимо подключения. У меня не было проблем с этим в postman, js и python., @Slurba

Я никогда не использовал его, но теперь я вижу, что begin(url) устарел. Клиентский объект должен быть поставлен. @Slurba, смотрите примеры, @Juraj

@Juraj Спасибо за совет, используя устаревшие функции, я получил ошибку 400 из begin(WiFiClient& client, const String &url) и снова -1 из begin(WiFiClient & client, const String& host, uint16_t port, const String& uri = "/", bool https = ложь). Я не вижу функции, которая помогает мне установить порт или отпечаток пальца (если это необходимо), поэтому я не уверен, какая функция правильная, @Slurba

см. Пример BasicHttpsClient, @Juraj


1 ответ


1

В итоге я отказался от HTTPS, так как он, похоже, не очень хорошо реализован (требуется жесткое кодирование отпечатка пальца). Изменил архитектуру моей системы так, чтобы HTTPS обрабатывался Python, который не требует прыжков через обручи.

,