Arduino ESP32 WebServer 无法以编程方式发送请求的文件?

问题描述 投票:0回答:1

目前正在 ESP32-EVB(非常棒的开发板,强烈推荐)上开发一个 Web 服务器项目,使用 SPIFF 分区来存储站点的静态资源,包括样式表、脚本等。我正在使用Arduino ESP32 核心的基本 WebServer.h 库,到目前为止一直运行良好,但它的简单性开始变得烦人。对于客户端发出的每个请求,必须初始化服务器以将特定请求与特定处理函数联系起来。这些领带需要在

setup()
中制作。

webServer.on("/", handleRoot);
webServer.on("/style.css", handleCSS);
webServer.on("/credits.html", handleCredits);

这里有一个非常类似的简单示例供参考。 如果您想实现强制门户,这种特殊性实际上非常有用,从任何类型的设备(iOS、Windows、Android)连接到端点时都需要独特的请求处理等),但当你想建立一个成熟的静态网站时就不行了,这需要几十个文件。

简而言之,除了设置服务器为浏览器请求的每个静态文件调用处理程序之外,还必须有更好的方法来处理文件请求。理想情况下,我想我可以解析 GET 请求,获取其要求的文件名,然后将其作为字符串传递给单个处理程序,该处理程序将从 SPIFF 分区提供该服务,但我找不到任何执行此操作的文档或示例。离开这里我能去哪里?


void handleRoot() {
  char content[400];
  snprintf(content, 400, readFile(SPIFFS, "/index.html"));
  webServer.send(200, "text/html", content);
}

void handleWindows() {
    webServer.send(200, "text/plain", "Microsoft NCSI");
    webServer.send(200, "text/plain", "Hello from your badge!");
}

void handleAndroid() {
    webServer.send(204, "text/plain", "");
}

void setup() {
  WiFi.mode(WIFI_AP);
  WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
  WiFi.softAP("Captive Portal Endpoint");

  dnsServer.start(DNS_PORT, "*", apIP);

  if (!startSPIFFS)
      Serial.println("SPIFFS beef'd it.");
  webServer.on("/", handleRoot);

  /* ######################### Detection Portal Init ######################### */
  // Apple
  webServer.on("/hotspot-detect.html", handleRoot);
  webServer.on("/success.html", handleRoot);
  // Android/ChromeOS
  webServer.on("/generate_204", handleRoot);
  //Microsoft
  webServer.on("/fwlink", handleRoot);
  webServer.on("/ncsi.txt", handleWindows);

  webServer.onNotFound([]() {
    webServer.send(200, "text/html", responseHTML);
  });
  webServer.begin();
}

void loop() {
  dnsServer.processNextRequest();
  webServer.handleClient();
}

c++ webserver esp32 arduino-esp32 captiveportal
1个回答
0
投票

经过更多挖掘后找到了解决方案。事实证明,Web 服务器上的设置之一是

.serveStatic()
,它的作用正如其听起来的那样。设置为 true 后,站点就可以直接请求它需要的任何其他静态文件。保持这个以防其他人需要看到这个(还有为什么是-1,老兄?)。

© www.soinside.com 2019 - 2024. All rights reserved.