• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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"); - вообще не воспринимается, нуль реакции.
 
Сверху Снизу