• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Получение данных с сайта

AlexTVR

Member
Добрый день!
Подключаюсь к сайту. HTTPClient http; http.begin(...........); http.Get();
Получаю ответ: String payload = http.getString();
Ответ очень длинный - это целиком вся страница. Принимается не полностью. Вероятно, не влазит в память.
Как получить ответ порциями, частями?
Каждую часть обрабатывать, а затем получать следующую и т.д.
 

fps

Active member
 

AlexTVR

Member
<ESP8266HTTPClient.h> - использую эту библиотеку. Куда этот RANGE вставлять?
 

fps

Active member
По первой ссылке формат значения поля, по второй - формат вызова метода.
Что конкретно не получается-то?
Пример кода:
C:
httpClient.addHeader("Range", "bytes=0-1023");
 

AlexTVR

Member
По первой ссылке формат значения поля, по второй - формат вызова метода.
Что конкретно не получается-то?
Пример кода:
C:
httpClient.addHeader("Range", "bytes=0-1023");
https.addHeader("Range", "bytes=0-200");
int httpCode = https.GET();

Так?
http 200;
Serial.println( https.getString().length());
возвращает 6568???
 

AlexTVR

Member
По первой ссылке формат значения поля, по второй - формат вызова метода.
Что конкретно не получается-то?
Пример кода:
C:
httpClient.addHeader("Range", "bytes=0-1023");
**
BasicHTTPSClientNofingerprint.ino

1.03.2019

*/

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

#include <WiFiClientSecureBearSSL.h>
// Fingerprint for demo URL, expires on June 2, 2019, needs to be updated well before this date
// const uint8_t fingerprint[20] = {0x5A, 0xCF, 0xFE, 0xF0, 0xF1, 0xA6, 0xF4, 0x5F, 0xD2, 0x11, 0x11, 0xC6, 0x1D, 0x2F, 0x0E, 0xBC, 0x39, 0x8D, 0x50, 0xE0};

ESP8266WiFiMulti WiFiMulti;
String error;
File file;

void setup() {

Serial.begin(115200);

// Serial.setDebugOutput(true);

Serial.println();
Serial.println();
Serial.println();

for (uint8_t t = 4; t > 0; t--) {
Serial.printf("[SETUP] WAIT %d...\n", t);
Serial.flush();
delay(1000);
}

WiFi.mode(WIFI_STA);
WiFiMulti.addAP("----", "-------");
}

void loop() {
// wait for WiFi connection
if ((WiFiMulti.run() == WL_CONNECTED)) {

std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);

//client->setFingerprint(fingerprint);
client->setInsecure();

HTTPClient https;

// getData = "? status =" + ADCData + "& station =" + station; //Заметка "?"
Serial.print("[HTTPS] begin...\n");


if (https.begin(*client, "https://tvernews.ru/")) { // HTTPS

Serial.print("[HTTPS] GET...\n");
// start connection and send HTTP header

int httpCode = https.GET();
https.addHeader("Range", "bytes=0-200");

// httpCode will be negative on error
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
Serial.printf("[HTTPS] GET... code: %d\n", httpCode);

// file found at server
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {


// String payload =

Serial.println( https.getString().length());

}
} else {
Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
}

https.end();
} else {
Serial.printf("[HTTPS] Unable to connect\n");
}


Serial.println("Wait 10s before next round...");
delay(10000);


}
}

Вот мой код полностью. Не работает так, как надо. Что изменить?
1607074822958.png
 

Вложения

AlexTVR

Member
Уберите .length() напечатайте ответ целиком как есть. Что там?
Печатал. Там очень много информации - целиком страница в HTTP.
При получении кода иногда происходит крах, так как в одну строку String payload = https.getString(); записывается слишком много байт.

https.addHeader("Range", "bytes=0-100"); - вообще не воспринимается, нуль реакции.
 
Сверху Снизу