Получение содержимого 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
@Aldrine NAX, 👍0
Обсуждение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, другой должен работать.
- Как разрешить междоменные запросы на ESP8266 WebServer
- Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?
- Управление реле 5В с помощью Wemos D1 R1
- Создать один сервер в режиме точки доступа, а другой - в режиме станции.
- Веб-сервер ESP8266 недоступен через 2 минуты после сброса
- Веб-сервер ESP8266 отображает только текст, даже если тип контента — текст/HTML.
- Веб-сервер ESP8266 не отвечает
- Ошибка при компиляции скетча для Arduino Uno (ld return 1)
! не там. длина данных восстановления равна 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