当前位置:   article > 正文

使用ai thinker esp32-cam制作一个局域网可登录服务器(网页控制esp32响应)----自动车之网页操控_esp32 http_server 加账户密码

esp32 http_server 加账户密码

代码更改WiFi账号密码后,写入ai thinker esp32-cam 板即可运行。登录调试串口输出的IP地址即可

  1. #include <WiFi.h>
  2. #include <WiFiClient.h>
  3. #include <WebServer.h>
  4. const char* ssid = "iamMT";
  5. const char* password = "meet2009";
  6. WebServer server(80);
  7. //Check if header is present and correct 检查收割台是否存在并正确
  8. bool is_authentified() { //authentified 认证的
  9. Serial.println("Enter is_authentified");
  10. if (server.hasHeader("Cookie")) {
  11. Serial.print("Found cookie: ");
  12. String cookie = server.header("Cookie");
  13. Serial.println(cookie);
  14. if (cookie.indexOf("ESPSESSIONID=1") != -1) {
  15. Serial.println("Authentification Successful");
  16. return true;
  17. }
  18. }
  19. Serial.println("Authentification Failed");
  20. return false;
  21. }
  22. //login page, also called for disconnect 登录页面,也称为断开连接
  23. void handleLogin() { //第一个网页显示及事件响应函数
  24. String msg = " \t\t";String msg_ = " \t\t";
  25. if (server.hasHeader("Cookie")) { //网页请求事件判断
  26. Serial.print("Found cookie: ");
  27. String cookie = server.header("Cookie");
  28. Serial.println(cookie);
  29. }
  30. if (server.hasArg("DISCONNECT")) { //点击超链接判断值
  31. Serial.println("Disconnection");
  32. server.sendHeader("Location", "/login");//定位到登录界面
  33. server.sendHeader("Cache-Control", "no-cache");//清空文本框
  34. server.sendHeader("Set-Cookie", "ESPSESSIONID=0");
  35. server.send(301);//是用于在 Web 服务器上发送一个 HTTP 301 响应的代码。HTTP 301 响应表示页面已被永久移动到另一个位置,浏览器会自动跳转到新位置
  36. return;
  37. }
  38. if(server.hasArg("SUBMIT")){ //登录按钮事件判断
  39. if (server.hasArg("USERNAME") && server.hasArg("PASSWORD")) {
  40. if (server.arg("USERNAME") == "admin" && server.arg("PASSWORD") == "admin") { //server.arg("PASSWORD")获取文本框值
  41. server.sendHeader("Location", "/"); //定位到主界面
  42. server.sendHeader("Cache-Control", "no-cache");
  43. server.sendHeader("Set-Cookie", "ESPSESSIONID=1");
  44. server.send(301);//是用于在 Web 服务器上发送一个 HTTP 301 响应的代码。HTTP 301 响应表示页面已被永久移动到另一个位置,浏览器会自动跳转到新位置
  45. Serial.println("Log in Successful");
  46. return;
  47. }
  48. msg = "Wrong username/password! try again.";
  49. Serial.println("Log in Failed"); //调试串口显示
  50. }
  51. }
  52. if(server.hasArg("SUBMIT_test")){ //异登录按钮事件判断
  53. if (server.hasArg("USERNAME") && server.hasArg("PASSWORD")) {
  54. if (server.arg("USERNAME") == "admin" && server.arg("PASSWORD") == "admin") { //server.arg("PASSWORD")获取文本框值
  55. server.sendHeader("Location", "/test"); //定位到/test界面
  56. server.sendHeader("Cache-Control", "no-cache");
  57. server.sendHeader("Set-Cookie", "ESPSESSIONID=1");
  58. server.send(301);//是用于在 Web 服务器上发送一个 HTTP 301 响应的代码。HTTP 301 响应表示页面已被永久移动到另一个位置,浏览器会自动跳转到新位置
  59. Serial.println("Log in Successful");
  60. return;
  61. }
  62. msg_ = "账号/密码错误,请重新输入!";
  63. Serial.println("Log in Failed"); //调试串口显示
  64. }
  65. }
  66. String content = "<html>\n<head>\n<meta charset='UTF-8'>\n</head>\n";
  67. content += "<body>\n<form action='/login' method='POST'><p style = 'font-size: 32px;'>To log in, please use : admin/admin<br>\n";//第一行文本
  68. content += "User:<input type='text' name='USERNAME' placeholder='user name' style='width: 200px; height: 50px;font-size: 32px;'><br>\n";//第二行输入文本框
  69. content += "Password:<input type='password' name='PASSWORD' placeholder='password' style='width: 200px; height: 50px;font-size: 32px;'><br>\n";//第三行文本框
  70. content += "<input type='submit' name='SUBMIT' value='登录' style='width: 200px; height: 50px;font-size: 32px;'>" + msg + "<br>\n";//第四行按钮+第五行文本
  71. content += "<input type='submit' name='SUBMIT_test' value='异登录' style='width: 200px; height: 50px;font-size: 32px;'>" + msg_+"</form><br>\n"; //<form action='/login_test' method='POST'>按钮事件
  72. content += "You also can go </p><a href='/inline'>here</a>\n</body>\n</html>";//第六行文本+链接
  73. server.send(200, "text/html", content); //发送登录前页面配置
  74. }
  75. void handletest(){
  76. String msg = " \t\t";
  77. if (server.hasHeader("Cookie")) { //网页请求事件判断
  78. Serial.print("Found cookie: ");
  79. String cookie = server.header("Cookie");
  80. Serial.println(cookie);
  81. }
  82. if(server.hasArg("SUBMIT")){ //登录按钮事件判断
  83. if (server.hasArg("PASSWORD")) {
  84. if (server.arg("PASSWORD") == "admin") { //server.arg("PASSWORD")获取文本框值
  85. server.sendHeader("Location", "/login"); //定位到主界面
  86. server.sendHeader("Cache-Control", "no-cache");
  87. server.sendHeader("Set-Cookie", "ESPSESSIONID=1");
  88. server.send(301);//是用于在 Web 服务器上发送一个 HTTP 301 响应的代码。HTTP 301 响应表示页面已被永久移动到另一个位置,浏览器会自动跳转到新位置
  89. Serial.println("Log in Successful");
  90. return;
  91. }
  92. msg = "密码输入错误,请重新输入!";
  93. Serial.println("Log in Failed"); //调试串口显示
  94. }
  95. }
  96. String content_test = "<html>\n<head>\n<p style'font-size: 32px;'></p>\n<meta charset='UTF-8'>\n</head>\n"; //http-equiv='Content-Type' content='text/html'
  97. content_test += "<body>\n<form action='/test' method='POST'><p style = 'font-size: 32px;'>To log out, please click button退出\n";
  98. content_test += "Password:<input type='password' name='PASSWORD' placeholder='password' style='width: 200px; height: 50px;font-size: 32px;'><br>\n";//第三行文本框
  99. content_test += "<input type='submit' name='SUBMIT' value='退出' style='width: 200px; height: 50px;font-size: 32px;'>" + msg + "<br>\n</form></p></body>\n</html>";
  100. server.send(200, "text/html", content_test); //发送登录前页面配置
  101. }
  102. //root page can be accessed only if authentification is ok 只有在身份验证正常的情况下才能访问根页面
  103. void handleRoot() { //登录后网页
  104. Serial.println("Enter handleRoot");
  105. String header;
  106. if (!is_authentified()) {
  107. server.sendHeader("Location", "/login");
  108. server.sendHeader("Cache-Control", "no-cache");
  109. server.send(301);
  110. return;
  111. }
  112. String content = "<html>\n<body>\n\n<H2>hello, you successfully connected to esp8266!</H2><br>\n";
  113. if (server.hasHeader("User-Agent")) {
  114. content += "<p style = 'font-size: 32px;'>the user agent used is : " + server.header("User-Agent") + "<br><br>\n"; //User-Agent网页头数据
  115. }
  116. content += "You can access this page until you <a href=\"/login?DISCONNECT=YES\">disconnect</a>\n</p></body>\n</html>";// <a 地址 >代表超链接跳转地址
  117. server.send(200, "text/html", content); //发送登录后页面配置
  118. }
  119. //no need authentification 无需身份验证
  120. void handleNotFound() {
  121. String message = "File Not Found\n\n";
  122. message += "URI: ";
  123. message += server.uri();
  124. message += "\nMethod: ";
  125. message += (server.method() == HTTP_GET) ? "GET" : "POST";
  126. message += "\nArguments: ";
  127. message += server.args();
  128. message += "\n";
  129. for (uint8_t i = 0; i < server.args(); i++) {
  130. message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  131. }
  132. server.send(404, "text/plain", message); //发送页面配置
  133. }
  134. void setup(void) {
  135. Serial.begin(115200);
  136. WiFi.mode(WIFI_STA);
  137. WiFi.begin(ssid, password);
  138. Serial.println("");
  139. // Wait for connection
  140. while (WiFi.status() != WL_CONNECTED) {
  141. delay(500);
  142. Serial.print(".");
  143. }
  144. Serial.println("");
  145. Serial.print("Connected to ");
  146. Serial.println(ssid);
  147. Serial.print("IP address: ");
  148. Serial.println(WiFi.localIP());
  149. server.on("/", handleRoot);
  150. server.on("/login", handleLogin);
  151. server.on("/test", handletest);
  152. server.on("/inline", []() {
  153. server.send(200, "text/plain", "<p style = 'font-size: 32px;'>this works without need of authentification</p>");
  154. });
  155. server.onNotFound(handleNotFound);
  156. //here the list of headers to be recorded 这是要录制的标题列表
  157. const char * headerkeys[] = {"User-Agent", "Cookie"} ;
  158. size_t headerkeyssize = sizeof(headerkeys) / sizeof(char*);
  159. //ask server to track these headers 要求服务器跟踪这些标头
  160. server.collectHeaders(headerkeys, headerkeyssize); //用于收集服务器响应的请求头
  161. server.begin();
  162. Serial.println("HTTP server started");
  163. }
  164. void loop(void) {
  165. // unsigned long t = millis();
  166. server.handleClient();
  167. // unsigned long tt = millis() - t;
  168. // Serial.println(tt);
  169. }

//网页事件响应机制不清楚

#include <WiFi.h>

#include <WiFiClient.h>

#include <WebServer.h>

const char* ssid     = "iamMT";

const char* password = "meet2009";

WebServer server(80);

//Check if header is present and correct 检查收割台是否存在并正确

bool is_authentified() {    //authentified 认证的

  Serial.println("Enter is_authentified");

  if (server.hasHeader("Cookie")) {

    Serial.print("Found cookie: ");

    String cookie = server.header("Cookie");

    Serial.println(cookie);

    if (cookie.indexOf("ESPSESSIONID=1") != -1) {

      Serial.println("Authentification Successful");

      return true;

    }

  }

  Serial.println("Authentification Failed");

  return false;

}

//login page, also called for disconnect 登录页面,也称为断开连接

void handleLogin() {  //第一个网页显示及事件响应函数

  String msg = " \t\t";String msg_ = " \t\t";

  if (server.hasHeader("Cookie")) {   //网页请求事件判断

    Serial.print("Found cookie: ");

    String cookie = server.header("Cookie");

    Serial.println(cookie);

  }

  if (server.hasArg("DISCONNECT")) {    //点击超链接判断值

    Serial.println("Disconnection");

    server.sendHeader("Location", "/login");//定位到登录界面

    server.sendHeader("Cache-Control", "no-cache");//清空文本框

    server.sendHeader("Set-Cookie", "ESPSESSIONID=0");

    server.send(301);//是用于在 Web 服务器上发送一个 HTTP 301 响应的代码。HTTP 301 响应表示页面已被永久移动到另一个位置,浏览器会自动跳转到新位置

    return;

  }

  if(server.hasArg("SUBMIT")){ //登录按钮事件判断

    if (server.hasArg("USERNAME") && server.hasArg("PASSWORD")) {

      if (server.arg("USERNAME") == "admin" &&  server.arg("PASSWORD") == "admin") {    //server.arg("PASSWORD")获取文本框值

        server.sendHeader("Location", "/");   //定位到主界面

        server.sendHeader("Cache-Control", "no-cache");

        server.sendHeader("Set-Cookie", "ESPSESSIONID=1");

        server.send(301);//是用于在 Web 服务器上发送一个 HTTP 301 响应的代码。HTTP 301 响应表示页面已被永久移动到另一个位置,浏览器会自动跳转到新位置

        Serial.println("Log in Successful");

        return;

      }

      msg = "Wrong username/password! try again.";

      Serial.println("Log in Failed");      //调试串口显示

    }

  }

  if(server.hasArg("SUBMIT_test")){ //异登录按钮事件判断

    if (server.hasArg("USERNAME") && server.hasArg("PASSWORD")) {

      if (server.arg("USERNAME") == "admin" &&  server.arg("PASSWORD") == "admin") {    //server.arg("PASSWORD")获取文本框值

        server.sendHeader("Location", "/test");   //定位到/test界面

        server.sendHeader("Cache-Control", "no-cache");

        server.sendHeader("Set-Cookie", "ESPSESSIONID=1");

        server.send(301);//是用于在 Web 服务器上发送一个 HTTP 301 响应的代码。HTTP 301 响应表示页面已被永久移动到另一个位置,浏览器会自动跳转到新位置

        Serial.println("Log in Successful");

        return;

      }

      msg_ = "账号/密码错误,请重新输入!";

      Serial.println("Log in Failed");      //调试串口显示

    }

  }

  String content = "<html>\n<head>\n<meta  charset='UTF-8'>\n</head>\n";

  content += "<body>\n<form action='/login' method='POST'><p style = 'font-size: 32px;'>To log in, please use : admin/admin<br>\n";//第一行文本

  content += "User:<input type='text' name='USERNAME' placeholder='user name' style='width: 200px; height: 50px;font-size: 32px;'><br>\n";//第二行输入文本框

  content += "Password:<input type='password' name='PASSWORD' placeholder='password' style='width: 200px; height: 50px;font-size: 32px;'><br>\n";//第三行文本框

  content += "<input type='submit' name='SUBMIT' value='登录' style='width: 200px; height: 50px;font-size: 32px;'>" + msg + "<br>\n";//第四行按钮+第五行文本

  content += "<input type='submit' name='SUBMIT_test' value='异登录' style='width: 200px; height: 50px;font-size: 32px;'>" + msg_+"</form><br>\n";   //<form action='/login_test' method='POST'>按钮事件

  content += "You also can go </p><a href='/inline'>here</a>\n</body>\n</html>";//第六行文本+链接

  server.send(200, "text/html", content);   //发送登录前页面配置

}

void handletest(){

  String msg = " \t\t";

  if (server.hasHeader("Cookie")) {   //网页请求事件判断

    Serial.print("Found cookie: ");

    String cookie = server.header("Cookie");

    Serial.println(cookie);

  }

  if(server.hasArg("SUBMIT")){ //登录按钮事件判断

    if (server.hasArg("PASSWORD")) {

      if (server.arg("PASSWORD") == "admin") {    //server.arg("PASSWORD")获取文本框值

        server.sendHeader("Location", "/login");   //定位到主界面

        server.sendHeader("Cache-Control", "no-cache");

        server.sendHeader("Set-Cookie", "ESPSESSIONID=1");

        server.send(301);//是用于在 Web 服务器上发送一个 HTTP 301 响应的代码。HTTP 301 响应表示页面已被永久移动到另一个位置,浏览器会自动跳转到新位置

        Serial.println("Log in Successful");

        return;

      }

      msg = "密码输入错误,请重新输入!";

      Serial.println("Log in Failed");      //调试串口显示

    }

  }

  String content_test = "<html>\n<head>\n<p style'font-size: 32px;'></p>\n<meta  charset='UTF-8'>\n</head>\n";    //http-equiv='Content-Type' content='text/html'

  content_test += "<body>\n<form action='/test' method='POST'><p style = 'font-size: 32px;'>To log out, please click button退出\n";  

  content_test += "Password:<input type='password' name='PASSWORD' placeholder='password' style='width: 200px; height: 50px;font-size: 32px;'><br>\n";//第三行文本框

  content_test += "<input type='submit' name='SUBMIT' value='退出' style='width: 200px; height: 50px;font-size: 32px;'>" + msg + "<br>\n</form></p></body>\n</html>";

  server.send(200, "text/html", content_test);   //发送登录前页面配置

}

//root page can be accessed only if authentification is ok 只有在身份验证正常的情况下才能访问根页面

void handleRoot() {     //登录后网页

  Serial.println("Enter handleRoot");

  String header;

  if (!is_authentified()) {

    server.sendHeader("Location", "/login");

    server.sendHeader("Cache-Control", "no-cache");

    server.send(301);

    return;

  }

  String content = "<html>\n<body>\n\n<H2>hello, you successfully connected to esp8266!</H2><br>\n";

  if (server.hasHeader("User-Agent")) {

    content += "<p style = 'font-size: 32px;'>the user agent used is : " + server.header("User-Agent") + "<br><br>\n";    //User-Agent网页头数据

  }

  content += "You can access this page until you <a href=\"/login?DISCONNECT=YES\">disconnect</a>\n</p></body>\n</html>";// <a 地址 >代表超链接跳转地址

  server.send(200, "text/html", content);     //发送登录后页面配置

}

//no need authentification 无需身份验证

void handleNotFound() {

  String message = "File Not Found\n\n";

  message += "URI: ";

  message += server.uri();

  message += "\nMethod: ";

  message += (server.method() == HTTP_GET) ? "GET" : "POST";

  message += "\nArguments: ";

  message += server.args();

  message += "\n";

  for (uint8_t i = 0; i < server.args(); i++) {

    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";

  }

  server.send(404, "text/plain", message);    //发送页面配置

}

void setup(void) {

  Serial.begin(115200);

  WiFi.mode(WIFI_STA);

  WiFi.begin(ssid, password);

  Serial.println("");

  // Wait for connection

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }

  Serial.println("");

  Serial.print("Connected to ");

  Serial.println(ssid);

  Serial.print("IP address: ");

  Serial.println(WiFi.localIP());


 

  server.on("/", handleRoot);

  server.on("/login", handleLogin);

  server.on("/test", handletest);  

  server.on("/inline", []() {

    server.send(200, "text/plain", "<p style = 'font-size: 32px;'>this works without need of authentification</p>");

  });

  server.onNotFound(handleNotFound);

  //here the list of headers to be recorded 这是要录制的标题列表

  const char * headerkeys[] = {"User-Agent", "Cookie"} ;

  size_t headerkeyssize = sizeof(headerkeys) / sizeof(char*);

  //ask server to track these headers  要求服务器跟踪这些标头

  server.collectHeaders(headerkeys, headerkeyssize);  //用于收集服务器响应的请求头

  server.begin();

  Serial.println("HTTP server started");

}

void loop(void) {

  // unsigned long t = millis();

  server.handleClient();

  // unsigned long tt = millis() - t;

  // Serial.println(tt);

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/471109
推荐阅读
相关标签
  

闽ICP备14008679号