Closed kbln closed 1 year ago
Какой редирект? Dns позволяет найти плату по имени.local, редиректа не должно быть
Сорри, может непонятно выразился, ты говоришь про MDNS (он работает), а я про DNSServer, который должен перенаправлять нас на айпишник esp при подключении, но почему-то не перенаправляет
Хм. А его как то отдельно включать можно?
Нашел в чем причина, но как ее решить пока не понял. Если убрать поддержку скачивания файлов с сервера, то DNSServer начинает работать
Ого, вот это интересно, спасибо.... надо чинить
а у меня работает нормально...
поддержка скачивания не должна влиять. Если скачивание не настроено, файл запрошен но юзер его не отправил - сервер ответит 200, точно так же как если отключить поддержку скачивания
Мне тоже это кажется странным, но перепроверил еще раз, без этого дефайна у меня редирект не работает
#define GP_NO_DOWNLOAD // без этого не работает DNSServer
#include <GyverPortal.h>
GyverPortal ui;
void build() {
GP.BUILD_BEGIN(GP_DARK);
GP.TITLE("Hello!");
GP.BUILD_END();
}
void setup() {
WiFi.mode(WIFI_AP);
WiFi.softAP("WiFi Config");
ui.attachBuild(build);
ui.start();
}
void loop() {
ui.tick();
}
дефайн закрывает всего два места в коде, можно определить какое. В portal.h
попробуй закомментировать по очереди их, сам дефайн в скетче соответственно не нужен
один
#ifdef GP_NO_DOWNLOAD
} else if (_uri.startsWith(F("/favicon.ico"))) { // иконка
server.send(200);
return;
#endif
два
#if defined(FS_H) && !defined(GP_NO_DOWNLOAD)
} else if (downOn && !server.args() && _uri[0] == '/' && _uri.indexOf('.') > 0) { // файл
if (_autoD && _fs) sendFile(_fs->open(_uri, "r")); // авто скачивание
else _fileDF = 1; // ручное скачивание (в action)
#endif
также сразу после server.onNotFound([this]() {
можно добавить вывод в порт, посмотреть что телефон запрашивает у сервера, это тоже в portal.h
server.onNotFound([this]() {
Serial.print(server.uri());
if (server.args()) {
Serial.print('?');
for (int i = 0; i < server.args(); i++) {
Serial.print(server.argName(i));
Serial.print('=');
Serial.print(server.arg(i));
if (i < server.args() - 1) Serial.print('&');
}
}
Serial.println();
проблема где-то тут
#if defined(FS_H) && !defined(GP_NO_DOWNLOAD)
} else if (downOn && !server.args() && _uri[0] == '/' && _uri.indexOf('.') > 0) { // файл
if (_autoD && _fs) sendFile(_fs->open(_uri, "r")); // авто скачивание
else _fileDF = 1; // ручное скачивание (в action)
#endif
нужно отладочный кусок вставить, посмотреть что запрашивает клиент
я бы сам поковырялся, но у меня работает) не могу повторить баг
Это выдало без дефайна /hotspot-detect.html
Это с дефайном:
/hotspot-detect.html
/hotspot-detect.html
/hotspot-detect.html
/GP_STYLE.css?v3.6.3=44089
/GP_SCRIPT.js?v3.6.3=0
/GP_time?unix=1679052377&gmt=360
/hotspot-detect.html
вот это интересно, мой андроид не запрашивает такого. Ну тогда понятно что происходит - смарт запрашивает страницу hotspot-detect.html, портал показывает ему дулю 200
, а при отключенном DOWNLOAD портал отправляет страницу
добавить код
} else if (_uri.startsWith(F("/hotspot-detect.html"))) {
_showPage = 1;
например вот сюда
если заведётся, добавлю в обновление тогда
Сработало!
отлично, тогда эту заплатку добавлю себе)
Версия библиотеки 3.6.3 МК esp8266 Версия SDK 3.1.1 Версия Arduino IDE 1.8.19
При прошивке вашего проекта wifiLogin в режиме WIFI_AP редирект не срабатывает, хотя по идее должен. При этом, стандартные примеры DNS сервера работают, а через Портал почему-то нет( В чем может быть проблема? У вас редирект работает?