Простой запрос GET с ESP8266HTTPClient

Я пытаюсь выполнить простой запрос GET. Но я всегда получаю код статуса -1. Вот мой полный код.

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

WiFiClient client;
#define AP_SSID "CCR"
#define AP_PASSWORD  "ccrxxxxx"

void wifiConnect() {
  Serial.print("Connecting to AP");
  WiFi.begin(AP_SSID, AP_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
}

void setup() {
  Serial.begin(9600);
  pinMode(0,1);
  Serial.begin(9600);
  delay(300);
  Serial.println("starting");
  WiFi.disconnect();
  Serial.println("disconnected");
  wifiConnect();
  Serial.println("Connected");
}

void loop() {
  HTTPClient http;
  http.begin("https://calm-falls-41696.herokuapp.com/api/v1/cards");
  http.addHeader("Content-Type", "application/json");
  int httpCode = http.GET();
  Serial.println(httpCode);
  if(httpCode == HTTP_CODE_OK) {
  Serial.print("HTTP response code ");
    Serial.println(httpCode);
    String response = http.getString();
    Serial.println(response);
  }
  http.end();
}

Подключение к Wi-Fi установлено успешно. Но в моем последовательном терминале я всегда вижу -1. Я использую PlatfromIO в коде Visual Studio.

Обновление 1: URL-адрес исправлен.

 http.begin("https://calm-falls-41696.herokuapp.com/api/v1/cards.json");

Я также тестировал это на google.com. Но он по-прежнему возвращает -1.

, 👍5

Обсуждение

@LookAlterno Я опубликовал свой полный код., @Ccr

AFAIK, ESP8266HTTPClient не поддерживает HTTPS. Кроме того, почему вы используете заголовок Content-Type вместе с методом GET? Это не имеет никакого смысла, поскольку запросы GET не имеют тела., @tttapa

Я считаю, что вам необходимо предоставить отпечаток сертификата веб-сайта в http.begin., @Musa

Всем привет, у меня проблема в http.post с ошибкой тайм-аута. Я получаю данные с моего устройства частями в течение 2 секунд. Мне нужно отправить эти данные на мой веб-сервер. Пример: 12 КБ... затем 1 секунда ожидания... затем данные 12 КБ... В этом запросе отправляются 2 отдельных файла вместо того, чтобы поддерживать соединение и иметь 24 КБ файла на веб-сервере. Я использую для этого httpclient и также попробовал передать длину контента. Но не работает. Пожалуйста, помогите/поддержите., @agrawal


2 ответа


2

Я протестировал ваш код, изменив только URL и заголовок, вот так:

//  http.begin("http://calm-falls-41696.herokuapp.com/api/v1/cards");
  http.begin("http://bing.com");
  http.addHeader("Content-Type", "text/html");

И он возвращает httpCode == 400.

Как сказал @tttapa, похоже, библиотека не поддерживает https.

,

4

Как сказал Муса, мне нужно было передать http.begin отпечаток сертификата веб-сайта.

void loop() {
  HTTPClient http;
  String thumbprint="08:3B:71:72:02:43:6E:CA:ED:42:86:93:BA:7E:DF:81:C4:BC:62:30";
  String path = "https://calm-falls-41696.herokuapp.com/api/v1/cards.json";
  http.begin(path, thumbprint);
  int httpCode = http.GET();
  Serial.println(httpCode);
  if(httpCode == HTTP_CODE_OK) {
    Serial.print("HTTP response code ");
    Serial.println(httpCode);
    String response = http.getString();
    Serial.println(response);
 }
  http.end();
  delay(1000);
}
,