ESP8266软AP模式下WebServer读取路径后消息的方法求助
解决ESP8266WebServer读取完整请求内容的问题
嘿,你碰到的问题是因为ESP8266WebServer库已经帮你封装了客户端连接的处理,它并没有available()方法——这个方法属于WiFiServer类,和WebServer的用法完全不一样。下面给你几种常用的方式来读取请求的完整内容:
1. 获取完整的请求路径(包括根路径后的部分)
如果你想获取用户访问的完整URI(比如/sensor/data?id=1这种),可以直接用server.uri()方法。我们可以创建一个通用处理器来处理所有路径,也可以指定特定路径:
#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> const char *ssid = "test"; const char *password = "password"; ESP8266WebServer server(80); // 处理所有路径的请求 void handleAllRequests() { // 获取完整的请求URI String fullRequestPath = server.uri(); // 获取请求方法(GET/POST等) String requestMethod = server.methodToString(server.method()); // 把路径返回给客户端看效果 server.send(200, "text/plain", "你请求的完整路径是: " + fullRequestPath + "\n请求方法: " + requestMethod); // 也可以在串口打印出来 Serial.print("收到请求: "); Serial.println(fullRequestPath); } void setup() { delay(1000); Serial.begin(115200); Serial.println(); Serial.print("配置接入点..."); WiFi.softAP(ssid, password); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP地址: "); Serial.println(myIP); // 用这个处理器处理所有未匹配的路径 server.onNotFound(handleAllRequests); // 也可以指定特定路径,比如/server/data,然后在处理器里拿uri // server.on("/server/data", handleAllRequests); server.begin(); Serial.println("HTTP服务器已启动"); } void loop() { server.handleClient(); }
2. 读取POST请求的请求体内容
如果是客户端发送POST请求并携带请求体(比如JSON、表单数据),可以用server.arg("plain")来读取原始的请求体内容:
void handlePostRequest() { if (server.method() == HTTP_POST) { String requestBody = server.arg("plain"); Serial.print("POST请求体内容: "); Serial.println(requestBody); server.send(200, "text/plain", "已收到POST内容: " + requestBody); } else { server.send(405, "text/plain", "只接受POST请求"); } } // 在setup函数里添加这个路径处理 server.on("/submit", handlePostRequest);
3. 读取GET请求的查询参数
如果是GET请求带参数(比如/query?temp=25&hum=60),可以用server.arg("参数名")来获取单个参数:
void handleQueryRequest() { String temp = server.arg("temp"); String hum = server.arg("hum"); String response = "温度: " + temp + "℃\n湿度: " + hum + "%"; server.send(200, "text/plain", response); Serial.print("温度参数: "); Serial.println(temp); } // 在setup函数里添加 server.on("/query", handleQueryRequest);
总结一下,ESP8266WebServer已经帮你处理了客户端连接和HTTP请求的解析工作,你不需要手动调用available()或者readStringUntil(),直接用库提供的uri()、arg()这些方法就能轻松获取请求的所有内容啦。
内容的提问来源于stack exchange,提问作者Tabish Saifullah
相关产品推荐
相关产品推荐

