Получение содержимого txt-файла с сайта с помощью esp8266

Я пытаюсь получить доступ к текстовому файлу на своем веб-сайте и получить его содержимое, размещенное на 000webhost. Я использовал этот код:

void sendGET() //клиентская функция для отправки/получения данных запроса GET.
{
 WiFiClient client;
 if (client.connect(host, httpPort)) {  //запускаем клиентское соединение, проверяем наличие соединения
 Serial.println("connected");
 client.println("GET /status.txt HTTP/1.1"); //загружаем текст
 client.println("Host: *****.000webhostapp.com");
 client.println("Connection: close");  //закрываем постоянное соединение 1.1
 client.println(); //конец запроса на получение
}
else {
 Serial.println("connection failed"); //сообщение об ошибке, если клиент не подключается
 Serial.println();
}
bool rn = false;
while (client.connected() && !client.available()) delay(1); //ждём данных
while (client.connected() || client.available()) { //подключено или данные доступны
char c = client.read(); // получает байт из буфера Ethernet
Serial.print(c); //выводит байт на последовательный монитор
// ответ = с;
if (rn == true) {
  if (c == '1') {
    Open();
  }
  else if (c == '0') {

  }
}
if (c == '!') {
  rn = true;
 }
}

Serial.println();
Serial.println("disconnecting.");
Serial.println();
client.stop(); //остановим клиент
rn = false;
}

но на моем последовательном мониторе это отразилось

connected
HTTP/1.1 200 OK
Date: Tue, 20 Nov 2018 06:26:41 GMT
Content-Type: text/plain; charset=UTF-8
Content-Length: 1
Last-Modified: Mon, 19 Nov 2018 10:01:12 GMT
Accept-Ranges: bytes
Server: awex
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Request-ID: 4575720f977969af975e822bc1e15eea
Age: 10203
X-Cache: HIT from localhost
X-Cache-Lookup: HIT from localhost:3128
Via: 1.1 localhost (squid/3.5.27)
Connection: close

1
disconnecting.

почему он не читает контент? я новичок на этой платформе, спасибо.

редактируйте, файл содержит только два символа. я использовал ! чтобы указать, что следующее число будет храниться, а следующим будет либо 0, либо 1 в зависимости от API, который я создал. Короче говоря, он используется для передачи ответа моего API для чтения Arduino с помощью esp8266

, 👍0

Обсуждение

! не там. длина данных восстановления равна 1, как вы можете видеть в заголовке Content-length., @Juraj

Как я уже сказал, он находится в файле, который я хочу прочитать. Это означает, что следующее число будет тем, которое будет проверено, если оно равно 1 или 0, в зависимости от созданного мной API, который редактирует текстовый файл. Задача Arduino здесь — проверить значение в файле и отреагировать на него. У меня есть код, который проверяет, равно ли прочитанное значение ! и приготовьтесь отреагировать, если оно будет равным., @Aldrine NAX

дело не в ответе. вы копируете каждый байт в Serial Monitor. ты видишь!? и длина равна 1, и есть один символ ('1'), @Juraj

Я только что проверил файл и ! там есть, можете ли вы указать на другие ошибки в моем коде?, @Aldrine NAX

проблема не в вашем коде Arduino. Ответ не содержит! Длина контента: 1, @Juraj

Считаете ли вы, что с веб-хостом, который я использую, возникла проблема? я использую www.000webhost.com, @Aldrine NAX

Вам необходимо отладить проблему на стороне сервера, прежде чем отлаживать сторону Arduino. Откройте сеанс telnet с портом 80 сервера, введите запрос и **увидите ответ самостоятельно**. Как только серверная часть заработает как положено, вы сможете вернуться к своему коду Arduino., @Edgar Bonet

Заходишь через сквид-прокси. Возможно, это кэширование старой версии файла., @Majenko

Я попробовал очистить весь текстовый файл перед записью его содержимого, и это сработало. но у меня все равно возникают задержки при чтении файла, @Aldrine NAX

какие задержки? ..., @Juraj


1 ответ


1

Ваше соединение с веб-сервером осуществляется через кеширующий прокси-сервер Squid. Он доставляет кэшированную версию файла:

X-Cache: HIT from localhost
X-Cache-Lookup: HIT from localhost:3128

Заголовок Age показывает, как долго страница находится в кеше:

Age: 10203

Это кэшируется около 2,8 часов.

Вам нужно указать кэшу не получать кэшированную версию, а вместо этого всегда обращаться к серверу для получения последней копии. Для этого вам нужно включить в запрос заголовок «без кэша»:

Cache-Control: no-cache

Это должно сказать кальмару: «Не кэшируйте эту страницу — получите настоящую».

Вы также можете добавить версию HTTP/1.0 того же самого:

Pragma: no-cache

Таким образом, если один из них не работает с этой версией Squid, другой должен работать.

,