Простой запрос 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.
@Ccr, 👍5
Обсуждение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);
}
,
@Ccr
Смотрите также:
- NodeMCU ESP8266 отключился от WiFi после нескольких часов работы
- Скетч Arduino для NodeMCU v1.0 (ESP8266-12E) не имеет ошибок при компиляции, но не запускается на плате NodeMCU v1.0 (ESP8266-12E)
- Как связать MPU9250 и NodeMcu?
- NodeMCU не может подключиться к мобильной точке доступа, когда я включаю коды для считывания датчика температуры
- Невозможно извлечь основные данные с помощью ThingspeakHTTP.
- nodemcu не отвечает в командном режиме
- Как получить список IP-адресов в локальной сети с помощью NodeMcu?
- Как код, набранный в Arduino IDE, работает на nodemcu?
@LookAlterno Я опубликовал свой полный код., @Ccr
AFAIK, ESP8266HTTPClient не поддерживает HTTPS. Кроме того, почему вы используете заголовок Content-Type вместе с методом GET? Это не имеет никакого смысла, поскольку запросы GET не имеют тела., @tttapa
Я считаю, что вам необходимо предоставить отпечаток сертификата веб-сайта в http.begin., @Musa
Всем привет, у меня проблема в http.post с ошибкой тайм-аута. Я получаю данные с моего устройства частями в течение 2 секунд. Мне нужно отправить эти данные на мой веб-сервер. Пример: 12 КБ... затем 1 секунда ожидания... затем данные 12 КБ... В этом запросе отправляются 2 отдельных файла вместо того, чтобы поддерживать соединение и иметь 24 КБ файла на веб-сервере. Я использую для этого httpclient и также попробовал передать длину контента. Но не работает. Пожалуйста, помогите/поддержите., @agrawal