位置导航: ESP8266库 / ESP8266WebServer库 / 本页
说明
使用ESP8266开发板实现的物联网服务器可以收集客户端发送的请求头信息。我们知道,HTTP客户端发送的请求信息中通常是包含多个HTTP请求头信息的。利用collectHeaders函数,我们可以设置需要获取的HTTP请求头信息,以便我们在后面的程序中加以处理使用。
请注意:在我们使用ESP8266WebServer库中的headers、header 、headerName、hasHeader 函数来获取浏览器请求头以前,需要首先调用本函数来设置ESP8266具体收集哪些请求头信息。
语法
server.collectHeaders(headerKeys, headerKeysCount)
参数
– headerKeys: 请求头名数组。此数组中的元素即是需要ESP8266处理或收集的请求头信息。下面我们看一个headerKeys数组的例子:
const char *headerKeys[] = {“Content-Length”, “Date”};
此数组共有两个元素,分别是”Content-Length”和”Date”。只有如此建立了数组后,接下来的程序里我们才可以使用其它ESP8266WebServer库函数来处理这两个请求头的信息内容。可以把这个数组看作是对ESP8266的提醒,即告诉ESP8266在后续的程序中,我们将要对数组中所包含的请求头信息进行处理。(具体操作方法,请见本函数的示例程序部分。)
– headerKeysCount: 需要获取/处理的请求头个数(可选参数,类型:size_t)
返回值
无
示例程序
当您将WiFi连接信息修改后并且将本示例程序上传ESP8266开发板后,开发板随即会自动连接WiFi。WiFi连接成功后,您将可以从串口监视器获取当前ESP8266开发板的IP。
接下来您可以通过浏览器地址栏输入ESP8266开发板的IP地址并键入回车(即向ESP8266开发板所建立的物联网服务器发送一个GET请求)。
浏览器请求发送之后,您就可以通过ESP8266开发板串口监视器看到浏览器发送的请求头信息中的connection以及HOST信息。(如下图所示)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
/********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : WebServer_demo_collectHeaders 团队/Team : 太极创客团队 / Taichi-Maker (www.taichi-maker.com) 作者/Author : Dapenson 日期/Date(YYYYMMDD) : 20200325 程序目的/Purpose : 使用8266作为WebServer,并用浏览器打开设备IP+80端口进行访问 访问主页将从串口反馈请求头的信息,具体内容请参考自定义函数 echo_headers() 注:本示例程序为获取客户端请求头信息分类函数中功能较全的版本 ----------------------------------------------------------------------- 本示例程序为太极创客团队制作的《零基础入门学用物联网》中示例程序。 该教程为对物联网开发感兴趣的朋友所设计和制作。如需了解更多该教程的信息,请参考以下网页: http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/ ***********************************************************************/ #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> //设置WiFi接入信息 const char* ssid = "TaichiMaker"; const char* password = "xxxxxxxx"; //创建 ESP8266WebServer 对象 ESP8266WebServer server(80); //设置访问次数变量 int repeat = 0; //设置需要收集的请求头信息 const char *headerKeys[] = {"Content-Length", "Content-Type", "Connection", "Date"}; // 设置主页请求处理函数 void homepage() { server.send(200, "text/plain", "test homepage"); Serial.println("用户访问了主页"); echo_headers(); //达到访问次数限制之后停止服务器运行 if (++repeat == 50) { Serial.println("Done"); server.stop(); } } // 设置处理404情况的函数'handleNotFound' void handleNotFound() { // 当浏览器请求的网络资源无法在服务器找到时, server.send(404, "text/plain", "404: Not found"); // NodeMCU将调用此函数。 echo_headers(); } void setup(void) { //初始化串口 Serial.begin(115200); Serial.println(""); //初始化网络 WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("IP Address: "); Serial.println(WiFi.localIP()); //初始化WebServer server.begin(); server.on("/", homepage); server.onNotFound(handleNotFound); Serial.println("HTTP server started"); server.collectHeaders(headerKeys, sizeof(headerKeys) / sizeof(headerKeys[0])); } void loop(void) { //监听客户请求并处理 server.handleClient(); } void echo_headers() { if (server.hasHeader("Connection")) {//判断该请求头是否存在 //使用示例,打印当前收集的请求头的数量 Serial.print("当前请求所收集的请求头数量:"); Serial.println(server.headers()); //打印当前请求中所收集的请求头指定项的值 Serial.print("当前请求所收集的请求头Connection:"); Serial.println(server.header("Connection")); //打印当前请求中所收集的Host Serial.print("当前请求所收集的请求头Host :"); Serial.println(server.hostHeader()); //分隔空行 Serial.println("\r\n"); } } |
相关内容
– headers – 获得请求头数量
– header – 获得指定请求头所对应的数值
– headerName – 获取指定请求头的名称
– hasHeader – 确定是否包含指定请求头
位置导航: ESP8266库 / ESP8266WebServer库 / 本页