第一版 原型系统

连上西电的网

直接发送上网的认证信息

返回认证结果网页

成功上网

#include <ESP8266WiFi.h>#define Use_Serial Serialstruct http_request{String  Referer;char* host;int httpPort = 80;String host_ur ;String postDate ;};/*WIFI账号和密码*/const char* ssid = "stu-xdwlan";    // Enter SSID here
const char* password = "";  //Enter Password here/*网页认证上网模式 */String usr_name="1601120383";//账号 String usr_pwd="mimaHENFuzb";//密码  加密-1/*网页认证上网post*/String  Referer="http://10.255.44.33/srun_portal_pc.php?ac_id=1&";char* host = "10.255.44.33";int httpPort = 80;String host_ur = "srun_portal_pc.php";String postDate = String("")+"action=login&ac_id=1&user_ip=&nas_ip=&user_mac=&url=&username=+"+usr_name+"&password="+usr_pwd;/*--------------------------------------------------------------* 通过上网认证,请自己修改postDate中的学号和密码---------------------------------------------------------------*/
int hdulogin() {WiFiClient client;if (!client.connect(host, httpPort)) {Use_Serial.println("connection failed");return 1;}delay(10);if (postDate.length() && postDate != "0") {String data = (String)postDate;int length = data.length();String postRequest =(String)("POST ") + "/"+host_ur+" HTTP/1.1\r\n" +"Host: " + host + "\r\n" +"Connection: Keep Alive\r\n" +"Content-Length: " + length + "\r\n" +"Accept: */*\r\n" +"Origin: http://"+host+"\r\n" +"Upgrade-Insecure-Requests: 1"+"\r\n" +"Content-Type: application/x-www-form-urlencoded;" + "\r\n" +"User-Agent: zyzandESP8266\r\n" +"Accept-Encoding: gzip, deflate"+"\r\n" +"Accept-Language: zh-CN,zh;q=0.9"+"\r\n" +                     "\r\n" +data + "\r\n";client.print(postRequest);delay(600);//处理返回信息String line = client.readStringUntil('\n');while (client.available() > 0) {line += "\r\n"+client.readStringUntil('\n');}Use_Serial.println(line);client.stop();if (line.indexOf("logon success") != -1 || line.indexOf("不需要") != -1) { //认证成功return 0;}else {return 2;}}client.stop();return 2;
}void setup() {Use_Serial.begin(115200);delay(1000);Use_Serial.println("Connecting to ");Use_Serial.println(ssid);//connect to your local wi-fi networkWiFi.begin(ssid, password);//check wi-fi is connected to wi-fi networkwhile (WiFi.status() != WL_CONNECTED) {delay(500);Use_Serial.print(".");}Use_Serial.println("");Use_Serial.println("WiFi connected");hdulogin();
}void loop()
{}

  

第二版  直接访问百度

连上西电WIFI

认证上网后

ping 百度或者其他网页

返回 请求网页源码

bug  百度能ping通,但是没网页,换了自己的服务器,访问hass,有数据

#include <ESP8266WiFi.h>
#include <string.h>
#include <ESP8266HTTPClient.h>#define Use_Serial Serial#ifdef ESP8266
extern "C" {
#include "user_interface.h"   //含有system_get_chip_id()的库
}
#endif//储存SN号
String SN;struct http_request {  String  Referer;char* host;int httpPort=80;String host_ur ;String usr_name;//账号String usr_pwd;//密码String postDate;};/*WIFI账号和密码*/const char* ssid = "stu-xdwlan";    // Enter SSID here
const char* password = "";  //Enter Password here/*网页认证上网post*/
//  String  Referer="http://10.255.44.33/srun_portal_pc.php?ac_id=1&";
//  char* host = "10.255.44.33";
//  int httpPort = 80;
//  String host_ur = "srun_portal_pc.php";/*网页认证上网模式 */
// String usr_name;//账号
// String usr_pwd;//密码
//  String postDate = String("")+"action=login&ac_id=1&user_ip=&nas_ip=&user_mac=&url=&username=+"+usr_name+"&password="+usr_pwd;/*--------------------------------------------------------------* 通过上网认证,请自己修改postDate中的学号和密码---------------------------------------------------------------*/
int hdulogin(struct http_request ruqest) {WiFiClient client;if (!client.connect(ruqest.host, ruqest.httpPort)) {Use_Serial.println("connection failed");return 1;}delay(10);if (ruqest.postDate.length() && ruqest.postDate != "0") {String data = (String)ruqest.postDate;int length = data.length();String postRequest =(String)("POST ") + "/"+ruqest.host_ur+" HTTP/1.1\r\n" +"Host: " +ruqest.host + "\r\n" +"Connection: Keep Alive\r\n" +"Content-Length: " + length + "\r\n" +"Accept: */*\r\n" +"Origin: http://"+ruqest.host+"\r\n" +"Upgrade-Insecure-Requests: 1"+"\r\n" +"Content-Type: application/x-www-form-urlencoded;" + "\r\n" +"User-Agent: zyzandESP8266\r\n" +"Accept-Encoding: gzip, deflate"+"\r\n" +"Accept-Language: zh-CN,zh;q=0.9"+"\r\n" +                     "\r\n" +data + "\r\n";client.print(postRequest);delay(600);//处理返回信息String line = client.readStringUntil('\n');while (client.available() > 0) {line += "\r\n"+client.readStringUntil('\n');}Use_Serial.println(line);client.stop();if (line.indexOf("时间") != -1 || line.indexOf("登陆") != -1) { //认证成功return 0;Use_Serial.println("time ----------- find ");}else {return 2;}}client.stop();return 2;
}void setup() {Use_Serial.begin(115200);delay(1000);Use_Serial.println("Connecting to ");Use_Serial.println(ssid);//connect to your local wi-fi networkWiFi.begin(ssid, password);//check wi-fi is connected to wi-fi networkwhile (WiFi.status() != WL_CONNECTED) {delay(500);Use_Serial.print(".");}Use_Serial.println("");Use_Serial.println("WiFi connected");SN = (String )system_get_chip_id();Serial.println(SN);// 认证上网http_request ruqest;ruqest.Referer="http://10.255.44.33/srun_portal_pc.php?ac_id=1&";ruqest.host = "10.255.44.33";ruqest.httpPort = 80;ruqest.host_ur = "srun_portal_pc.php";ruqest.usr_name="1601120383";//账号ruqest.usr_pwd="mimaHENFuzb";//密码  密码已经修改 +1ruqest.postDate = String("")+"action=login&ac_id=1&user_ip=&nas_ip=&user_mac=&url=&username=+"+ ruqest.usr_name+"&password="+ruqest.usr_pwd;hdulogin(ruqest);}void loop()
{if(WiFi.status() == WL_CONNECTED){HTTPClient http;http.begin("www.baidu.com", 80,"/"); //HTTPint httpCode = http.GET();if (httpCode) {// 打印返回代码Serial.printf("code=%d\n", httpCode);// 数据正常返回if (httpCode == 200) {      String payload = http.getString();Serial.print(payload);}else{Serial.print("httpCode... failed\n");delay(5000);}}else {Serial.print("GET... failed\n");}delay(5000);
}
}

  第三版 HTTP+MQTT

西电网页认证上网

直接连接公网mqtt

手机发消息,esp8266向电脑打印出来

arduino 不支持中文汉字打印输出

上面是 西电网页认证后返回的网页源码

下面是从MQTT服务器接收的数据

至此初步完成ESP8266网页认证上网模式。

下一步,将固定的post请求信息换成网页输入可以配置的

  1. 网页输入wifi名(网页认证模式的wifi),无密码
  2. 网页输入自己的学号和密码
  3. 自动截取给网页服务器返回的 http请求和参数格式
  4. 由此配置ESO8266来网页认证上网

关于网页服务器建立,返回页面,手动输入配置信息的教程看 ESP8266路由文件教程。

#include <ESP8266WiFi.h>
#include <string.h>
#include <ESP8266HTTPClient.h>#define Use_Serial Serial#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"#define AIO_SERVER      "www.dongvdong.top"
#define AIO_SERVERPORT  1883
#define AIO_USERNAME    ""
#define AIO_KEY         ""
WiFiClient mqttclient;
Adafruit_MQTT_Client mqtt(&mqttclient, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Subscribe onoffbutton = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/test", MQTT_QOS_1);
void onoffcallback(char *data, uint16_t len) {Serial.print("Hey we're in a onoff callback, the button value is: ");Serial.println(data);
}void MQTT_connect() {int8_t ret;// Stop if already connected.if (mqtt.connected()) {return;}Serial.print("Connecting to MQTT... ");uint8_t retries = 3;while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connectedSerial.println(mqtt.connectErrorString(ret));Serial.println("Retrying MQTT connection in 10 seconds...");mqtt.disconnect();delay(10000);  // wait 10 secondsretries--;if (retries == 0) {// basically die and wait for WDT to reset mewhile (1);}}Serial.println("MQTT Connected!");
}#ifdef ESP8266
extern "C" {
#include "user_interface.h"   //含有system_get_chip_id()的库
}
#endif//储存SN号
String SN;struct http_request {  String  Referer;char* host;int httpPort=80;String host_ur ;String usr_name;//账号String usr_pwd;//密码String postDate;};/*WIFI账号和密码*/const char* ssid = "stu-xdwlan";    // Enter SSID here
const char* password = "";  //Enter Password here/*网页认证上网post*/
//  String  Referer="http://10.255.44.33/srun_portal_pc.php?ac_id=1&";
//  char* host = "10.255.44.33";
//  int httpPort = 80;
//  String host_ur = "srun_portal_pc.php";/*网页认证上网模式 */
// String usr_name;//账号
// String usr_pwd;//密码
//  String postDate = String("")+"action=login&ac_id=1&user_ip=&nas_ip=&user_mac=&url=&username=+"+usr_name+"&password="+usr_pwd;/*--------------------------------------------------------------* 通过上网认证,请自己修改postDate中的学号和密码---------------------------------------------------------------*/
int hdulogin(struct http_request ruqest) {WiFiClient client;if (!client.connect(ruqest.host, ruqest.httpPort)) {Use_Serial.println("connection failed");return 1;}delay(10);if (ruqest.postDate.length() && ruqest.postDate != "0") {String data = (String)ruqest.postDate;int length = data.length();String postRequest =(String)("POST ") + "/"+ruqest.host_ur+" HTTP/1.1\r\n" +"Host: " +ruqest.host + "\r\n" +"Connection: Keep Alive\r\n" +"Content-Length: " + length + "\r\n" +"Accept: */*\r\n" +"Origin: http://"+ruqest.host+"\r\n" +"Upgrade-Insecure-Requests: 1"+"\r\n" +"Content-Type: application/x-www-form-urlencoded;" + "\r\n" +"User-Agent: zyzandESP8266\r\n" +"Accept-Encoding: gzip, deflate"+"\r\n" +"Accept-Language: zh-CN,zh;q=0.9"+"\r\n" +                     "\r\n" +data + "\r\n";client.print(postRequest);delay(600);//处理返回信息String line = client.readStringUntil('\n');while (client.available() > 0) {line += "\r\n"+client.readStringUntil('\n');}Use_Serial.println(line);client.stop();if (line.indexOf("时间") != -1 || line.indexOf("登陆") != -1) { //认证成功return 0;Use_Serial.println("time ----------- find ");}else {return 2;}}client.stop();return 2;
}void setup() {Use_Serial.begin(115200);delay(1000);Use_Serial.println("Connecting to ");Use_Serial.println(ssid);//connect to your local wi-fi networkWiFi.begin(ssid, password);//check wi-fi is connected to wi-fi networkwhile (WiFi.status() != WL_CONNECTED) {delay(500);Use_Serial.print(".");}Use_Serial.println("");Use_Serial.println("WiFi connected");SN = (String )system_get_chip_id();Serial.println(SN);onoffbutton.setCallback(onoffcallback);mqtt.subscribe(&onoffbutton);// 认证上网http_request ruqest;ruqest.Referer="http://10.255.44.33/srun_portal_pc.php?ac_id=1&";ruqest.host = "10.255.44.33";ruqest.httpPort = 80;ruqest.host_ur = "srun_portal_pc.php";ruqest.usr_name="1601120383";//账号ruqest.usr_pwd="mimaHENFuzb";//密码  经修改  +1  ruqest.postDate = String("")+"action=login&ac_id=1&user_ip=&nas_ip=&user_mac=&url=&username=+"+ ruqest.usr_name+"&password="+ruqest.usr_pwd;hdulogin(ruqest);}void loop()
{if(WiFi.status() == WL_CONNECTED){MQTT_connect();mqtt.processPackets(10000);if(! mqtt.ping()) {mqtt.disconnect();}}else {Serial.print("wifi... failed\n");}delay(5000);
}

  

转载于:https://www.cnblogs.com/kekeoutlook/p/9616614.html

WiFi-ESP8266入门http(3-3)网页认证上网-post请求-ESP8266程序相关推荐

  1. WiFi-ESP8266入门http(3-2)网页认证上网-post请求

    测试账号密码 加密模式  1 18011210338  + 015871     - 测试2 1601120382       +1 mimaHENFuzb  -1 打开网页 手机端 http://1 ...

  2. WiFi-ESP8266入门http(3-1)网页认证上网-post请求(原教程)

    教程:http://geek-workshop.com/thread-37484-1-1.html 源码:链接:https://pan.baidu.com/s/1yuYYqsM-WSOb0AbyAT0 ...

  3. ubuntu系统 有线网络无法通过网页认证上网

    昨天14.04系统更新,提示restart,我就知道,在网上下的无线网卡驱动要被删了.果不其然,今天一打开电脑,无法选择无线网络.照例打算先有线连上,再下载无线网卡驱动.可是居然无法进入网页认证界面. ...

  4. VBS脚本实现宽带上网加网页认证上网双验证

    现在不乏还存在宽带上网的和网页认证同时存在的验证模式,每次输入太麻烦,我将自己编写的VBS脚本共享给你们: Dim wsh,yyy,wmi Dim username, psw username = 3 ...

  5. 网页认证上网服务器无响应,portal认证失败,网络故障或者portal服务器没有响应排查方法...

    1.客户端发送CODE_PP_DOMAIN_REQUSET报文给portal服务器,此时可以看到客户端发送给portal是服务器NAT后地址10.217.90.20 [2019-09-20 15:47 ...

  6. WiFi-ESP8266入门http(3-4)网页一键配网(1若为普通wifi直连 2若为西电网页认证自动网页post请求连接)+网页按钮灯控+MQTT通信...

    网页一键配网(1若为普通wifi直连  2若为西电网页认证自动网页post请求连接)+网页按钮灯控+MQTT通信 工程连接:https://github.com/Dongvdong/ESP8266_H ...

  7. wifi认证取消html查看器,wifi网页认证怎么设置

    设置步骤: 第一步:登录管理界面    wifi网页认证怎么设置 1.连接电脑 使用单机能上网的电脑,通过网线连接到路由器的LAN口 2.登录管理界面 打开电脑的浏览器,清空地址栏后,输入路由器的管理 ...

  8. Android Wi-Fi 自动连接至需要网页认证AP失败

    测试机打开Wi-Fi,连接至Test,关闭Wi-Fi再打开后不能自动重连至Test(其他open AP可以自动重连) 1 测试步骤 测试机打开Wi-Fi,连接至Test(为需要网页认证才能够使用的Wi ...

  9. 跳过wifi网页认证的app,免认证连接校园网

    跳过wifi网页认证,这不就是免认证连接校园网吗?这事无为WiFi很专业,全网专业,有兴趣可来免测试

最新文章

  1. Linux 中打开tomcat的startup.sh 没有显示successed的方法。
  2. GE前董事长伊梅尔特谈数字化转型:制造企业这件事做不好,一定没出路
  3. shell批量添加用户
  4. (转)Elasticsearch 聚合查询、桶聚合、管道聚合及复合查询
  5. vsftpd的主配置文件是什么linux,vsftpd.conf配置文件详解
  6. popwindow弹窗
  7. 使用 fail2ban 防御 SSH 服务器的暴力破解
  8. C语言学习-翁凯(第十章笔记)
  9. android中android:wight详解
  10. Makefile编译忽略warning或者将warning视为error
  11. 使用 Abp.Zero 搭建第三方登录模块(一):原理篇
  12. 解决 chrome 启动时强制打开2345导航(或其他网址)的方法
  13. 画春天的景色计算机教案,【美丽的春天图画】美丽的春天幼儿园春季教案
  14. 深入理解java虚拟机(五)GC垃圾回收-经典垃圾收集器
  15. 南邮 OJ 1076 机器狗组装费用
  16. 「详解」imgaug 图像增强方法
  17. MySQL查询优化利刃-EXPLAIN
  18. 查询日历的综合性C语言程序的设计,C语言程序设计实验指导书060522.doc
  19. iOS打包pod spec
  20. android手机blhx素材提取

热门文章

  1. 《unix环境高级编程》--- 终端I/O
  2. ios游戏比Android贵,为什么苹果商店充值比安卓的要贵?
  3. eclipse c语言 自动补全,eclipse里头怎么设C/C++的智能提示
  4. python大学课程实验六_Python程序设计实验六:函数
  5. java学习笔记20(Lambda表达式、函数式编程、流式计算、练习)
  6. 如何快速的自建 DoH ( DNS over HTTPS) 服务
  7. 【VUE】vue实现登录滑动拼图验证的两种方法,纯前端组件验证以及前后端同时验证
  8. 量子计算机用什么传导信息,量子是如何传递信息的?
  9. php去掉notice错误,学习猿地-php怎么关闭notice级别的错误提示?
  10. BIM轻量化技术解析