ESP8266WebServer库
文章目录
- ESP8266WebServer库
- 1.webserver管理方法
- 2. 配置client请求处理方法
- 3. 获取请求方法
- 3.1 url() —— 获取请求的url
- 3.2 method() —— 获取请求方法
- 3.3 arg() —— 获取请求参数的值
- 3.4 argName() —— 获取请求参数的名称
- 3.5 args() —— 获取参数个数
- 3.6 hasArg() —— 是否存在某个参数
- 3.7 collectHeaders() —— 设置需要收集的请求头
- 3.8 header() —— 获取请求头参数
- 3.9 headerName() —— 获取请求头名字
- 3.10 headers() —— 获取请求头个数
- 3.11 hasHeader() —— 判断是否存在某个请求头
- 3.12 hostHeader() —— 获取请求头Host的值
- 3.13 authenticate() —— 认证校验
- 3.14 handleClient() —— 处理http请求
- 4. 响应client请求方法
1.webserver管理方法
1.1 ESP8266WebServer() —— 创建web server
-
ESP8266WebServer(IPAddress addr, int port = 80);
参数说明:
addr: ip地址
port: 端口号,默认为80
-
ESP8266WebServer(int port = 80);
参数说明:
port: 端口号
1.2 begin() —— 启动web server
-
void begin();
-
void begin(uint16_t port);
参数说明:
port: 端口号
-
begin函数要在配置好各个请求后在使用
1.3 close() —— 关闭web server
void close();
1.4 stop() —— 关闭web server
void stop();
2. 配置client请求处理方法
2.1 on() —— 请求响应回调
void on(const String &url, THandlerFunction handler);
参数介绍:
url: 路径
handler: 对应url的处理函数
注: 这里的handler函数是Http_ANY,不区分GET,POST等
void on(const String &url, HTTPMethod method, THandlerFunction fn);
参数介绍:
url: 路径
method: Http请求方法( HTTP_ANY, HTTP_GET, HTTP_POST, HTTP_PUT, HTTP_PATCH, TTP_DELETE, HTTP_OPTIONS )
fn: 对应url的处理函数
void on(const String &url, HTTPMethod method,
THandlerFunction fn, ThandlerFunction ufn);
参数介绍:
url: 路径
method: Http请求方法( HTTP_ANY, HTTP_GET ,HTTP_POST, HTTP_PUT, HTTP_PATCH, TTP_DELETE, HTTP_OPTIONS )
fn: 对应utl的处理函数
ufn: 文件上传处理函数
2.2 onNotFound() —— 配置无效url的handler
void onNotFound(THandlerFunction fn);
参数介绍:
fn: 对应的处理函数
注: 当找不到相对应的http请求处理函数时会调用该函数配置的fn方法
2.3 onFileUpload() —— 配置处理文件上传的hanlder
void onFileUpload(THandlerFunction fn);
参数介绍:
fn: 对应的处理函数
3. 获取请求方法
3.1 url() —— 获取请求的url
String url();
3.2 method() —— 获取请求方法
HTTPMethod method()
参数介绍:
返回值: HTTP_ANY, HTTP_GET, HTTP_POST, HTTP_PUT, HTTP_PATCH, HTTP_DELETE, HTTP_OPTIONS
3.3 arg() —— 获取请求参数的值
String arg(String name);
参数介绍:
name: 根据关键字name获取请求参数的值
String arg(int i);
参数介绍:
i: 获取第i个请求参数的值
3.4 argName() —— 获取请求参数的名称
String argName(int i);
参数介绍:
i: 获取第i个参数的名称
3.5 args() —— 获取参数个数
int args();
3.6 hasArg() —— 是否存在某个参数
bool hasArg(String name);
3.7 collectHeaders() —— 设置需要收集的请求头
void collectHeaders(const char* headerKeys[], const size_t headerKeysCount);
参数介绍:
headerkeys[]: 请求头的名字
headerkeysCount: 请求头的个数
3.8 header() —— 获取请求头参数
String header(String name);
参数设置:
name: 请求头名字
String header(int i);
参数介绍:
i: 获取第i个请求头参数
3.9 headerName() —— 获取请求头名字
String headerName(int i);
参数介绍:
i: 获取第i个请求头名
3.10 headers() —— 获取请求头个数
int headers();
3.11 hasHeader() —— 判断是否存在某个请求头
bool hasHeader(String name);
3.12 hostHeader() —— 获取请求头Host的值
String hostHeader();
3.13 authenticate() —— 认证校验
bool authenticate(const char * username, const char * password);
参数介绍:
username: 用户账号
password: 用户密码
3.14 handleClient() —— 处理http请求
void handleClient();
4. 响应client请求方法
4.1 upload() —— 处理文件上传
HTTPUpload& upload();
使用实例:
//实例说明 非完整代码,无法直接运行,理解即可
/**
* 处理文件上传 HandlerFunction
* 此方法会在文件上传过程中多次回调,我们可以判断上传状态
*/
void handleFileUpload() {
//判断http requestUri
if (server.uri() != "/edit") {
return;
}
//获得 Http上传文件处理对象
HTTPUpload& upload = server.upload();
//文件开始上传
if (upload.status == UPLOAD_FILE_START) {
String filename = upload.filename;
if (!filename.startsWith("/")) {
filename = "/" + filename;
}
DBG_OUTPUT_PORT.print("handleFileUpload Name: "); DBG_OUTPUT_PORT.println(filename);
//本地文件系统创建一个文件用来保存内容
fsUploadFile = SPIFFS.open(filename, "w");
filename = String();
} else if (upload.status == UPLOAD_FILE_WRITE) {
//文件开始写入文件
//DBG_OUTPUT_PORT.print("handleFileUpload Data: "); DBG_OUTPUT_PORT.println(upload.currentSize);
if (fsUploadFile) {
//写入文件
fsUploadFile.write(upload.buf, upload.currentSize);
}
} else if (upload.status == UPLOAD_FILE_END) {
//文件上传结束
if (fsUploadFile) {
fsUploadFile.close();
}
DBG_OUTPUT_PORT.print("handleFileUpload Size: "); DBG_OUTPUT_PORT.println(upload.totalSize);
}
}
//注册文件上传处理回调
server.on("/edit", HTTP_POST, []() {
server.send(200, "text/plain", "");
}, handleFileUpload);
4.2 sendHeader() —— 设置响应头
void sendHeader(const String& name, const String& value, bool first = false);
参数介绍:
name: 响应头名
value: 响应头值
first: 是否需要放在第一行
4.3 setContentLength() —— 设置响应体长度
void setContentLength(const size_t contentLength);
4.4 sendContent()/sendContent_P() —— 发送响应内容
void sendContent(const String& content);
void sendContent_P(PGM_P content);
void sendContent_P(PGM_P content, size_t size);
4.5 streamFile() —— 发送响应文件流
size_t streamFile(T &file, const String& contentType);
参数介绍:
file: 具体文件
contentType: 响应类型
4.6 send() —— 发送响应数据
void send(int code, const char* content_type = NULL, const String& content = String(""));
void send(int code, char* content_type, const String& content);
void send(int code, const String& content_type, const String& content);
void send_P(int code, PGM_P content_type, PGM_P content);
void send_P(int code, PGM_P content_type, PGM_P content, size_t contentLength);
参数介绍:
code: 响应状态码
content_type: 响应内容类型
& content = String(""));
void send(int code, char* content_type, const String& content);
void send(int code, const String& content_type, const String& content);
void send_P(int code, PGM_P content_type, PGM_P content);
void send_P(int code, PGM_P content_type, PGM_P content, size_t contentLength);
参数介绍:
**code:** 响应状态码
**content_type:** 响应内容类型
**content:** 具体响应内容