开始
搭了个树莓派连着校园网,但是校园网每天24点掉线,次日6点后才能连接,所以用Python写了个脚本,每天早上6点20执行一次,这样就不用每天手动登录了。
在写代码之前我们要先获取一些参数,而用这些参数可以让我们通过代码向服务器提交正确的请求信息从而让服务器把我们的连接IP设为已登陆。而与服务器交互有GET,POST,PUT,DELETE这四种方法,通常我们用POST来向服务器提交请求的信息。首先我们要知道需要POST的地址
获得post的地址和参数有两种方式,一种是通过查看网页源码,用谷歌浏览器的开发者工具分析信息,不过这种方式比较费时间,并且有可能找不到想要的信息。我一开始就分析登录页面的代码,花费了很多时间也没有找到浏览器post的地址,然后后来在查相关资料时看到了一个相关教程,他采用抓包软件Fiddler来分析浏览器和服务器之间交换的信息,很容易就找到了我们需要的信息,我用Fiddler抓包了一下,果然找到了我想要的信息,然后我把校园网断开,右键Fiddler里抓取的请求,Replay-Reissue Requests重新向服务器发送一次,然后发现校园网已经登录了,所以用这个请求里的参数通过Python写个代码,通过实际测试,可以登录校园网。
我们校园网是网页端认证,采用的是锐捷的软件。
抓包的方法。
首先我们要使用抓包软件来分析浏览器和服务器之间交换了什么信息,抓包软件Fiddler直接打开就开始抓包了,然后打开浏览器访问校园网登录页面。
Fiddler下载地址,文件来源于网上,不放心的可以去官网下载https://songzx.lanzous.com/iaBrFk6mrsd
然后我们查看Fiddler软件就会获得一些信息。
然后点开这个
在点击Inspectors–Headers,然后就会看到我们想要的头文件信息,
而WebForms里就有我们需要的表单信息,而这个登录是加密的,所以queryString里的信息是杂乱的,不过只要我们登录的IP地址不变,用这些加密后的信息也可以直接登录。userId里是账户,password里是密码。
头文件里把Fiddler软件获取到的信息都填进去,如果Accept信息是空的话,就在Fiddler里找一个其他的访问登录页面的GET请求里获取。
表单信息同样全填上。
然后就完成了,所有信息就这些。
相关Python库的安装我的另一个文章里有https://blog.csdn.net/qq_30018717/article/details/112385396
完整代码
#coding=UTF-8
#!/usr/bin/python #可作为脚本写入开机自启动
import time
from bs4 import BeautifulSoup #导入BeautifulSoup,好像这个没必要,没用上。。。
import requests #导入requests库
url="***************" #把将要POST的地址赋值给url,该地址就是我们发送请求给服务器的地址。**********这个地址需要修改*******************
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cookie': 'EPORTAL_COOKIE_DOMAIN=; EPORTAL_COOKIE_SERVER=; EPORTAL_COOKIE_OPERATORPWD=; EPORTAL_COOKIE_SAVEPASSWORD=false; EPORTAL_COOKIE_USERNAME=; EPORTAL_COOKIE_PASSWORD=; EPORTAL_COOKIE_SERVER_NAME=; EPORTAL_AUTO_LAND=; EPORTAL_USER_GROUP=null; JSESSIONID=************; JSESSIONID=********',
'Host': '172.208.1.202',
'Content-Length': '630',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Connection': 'keep-alive',
'Origin': 'http://172.208.1.202',
'Referer': '*******',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
#请求的头文件*****************头文件需要修改*********************
formdata={
"method":"login",
"userId":"*******",
"password":"******",
"service":"",
"queryString":"**********",
"operatorPwd":"",
"operatorUserId":"",
"validcode":"",
"passwordEncrypt":"false",
#将要post的表单数据,也就是把这里的数据发送给服务器******************发送的数据需要修改****************
}
response=requests.post(url,data=formdata,headers=headers) 发送POST请求
print(response.text) 打印服务器的响应信息
定时登录部分
其实还没完,毕竟我们要实现定时自动登录,我是把这个代码挂到树莓派上,然后用网上的方法修改rc.local文件来自动执行python代码,不过这里面已经被我放了一个脚本,而且这个脚本是开机一直运行,由于是顺序执行,导致下一个脚本不能运行,然后搜了好多方法都试了,都不行,后来我发现了一个好用的东西。Linux系统的cron服务,通过该服务里的crontab命令,可以实现重启执行命令和定时执行命令。
命令行里输入crontab -e
打开crontab文件,如果是第一次使用crontab,则需要选择一个编辑器(按Enter进入nano)。
然后在该文件的最后添加需要执行的命令,
20 6 * * * python /home/pi/test.py
命令前的五位分别是分钟,小时,几号,月份,星期几。
具体的写法大家可以去网上搜索,我就不详细介绍了。
个人网站文章
参考网站
校园网网页认证自动登录https://blog.csdn.net/u014113117/article/details/84329201?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase
python脚本实现自动登陆校园网https://blog.csdn.net/abitch/article/details/51939879?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control
crontab命令详解 含启动/重启/停止https://www.cnblogs.com/kenshinobiy/p/7685229.html
用 crontab 实现开机自动运行脚本https://blog.csdn.net/weixin_33729196/article/details/87962922
Linux crontab 命令https://www.runoob.com/linux/linux-comm-crontab.html