# 想法

疫情以来,学校的规定是每天晚上8点进行健康打卡,报告你所在的城市以及你的健康状况。其实,一开始还是能理解这种规定,毕竟学校是为了学生的安全。但是直到开学住寝室之后,竟然还要每晚打卡,我寻思着都封校了我们也出不去啊,当然是每天都在「上海」啦。于是就有了这个小项目。

# 原理

这个项目其实就是代替手动去完成含参数的POST请求。但是学校的打卡系统的API仅支持通过Cookie来提交POST请求,对于「信息门户」的账号和密码没用。

这就导致了一个很严重的问题,就是所有想用这个「自动打卡」项目的人必须要手动去抓取自己的Cookie,并且拿到自己的一些个人信息,比如学号之类的东西,统统丢在数据库里面,才能每天自动的完成打卡。这对于很多没有接触过抓包的人来说,这似乎太不友好了。

发现了问题,当然要去解决,我花了一个晚上的时间,抓了近200次不同的包,通过4次GET/POST请求,用学号和密码拿到了Cookie,其实在这过程中有很多小插曲,在这就不细说了,感兴趣的朋友可以自己去发现哦。

# 实现

用到的所有技术为:HTML、PHP、Python、MySQL

主要分为三部分

Part1:前端HTML用户主动提交学号和密码,通过Ajax的方式提交给PHP,PHP向某个接口发送一次POST请求验证账号密码是否正确。如果正确,存入数据库,并在前端提示「恭喜你提交成功」字样。如果错误,在前端会要求用户重新输入密码。

Part2:通过数据库表1中的学号和密码,用Python多次请求,获得签到所需要的所有信息,包括学号、姓名、院系、uuid、cookie等,存入数据库的表2。

Part3:等待20点的来临,Python会将将数据库的表2中的所有用户信息,依次向接口发送POST请求来完成打卡。

值得一提的是,三部分完全分离。由于Cookie是永远不会变的参数,而这正是发送POST请求最关键的数据,意味着即使你在提交之后修改了密码,系统仍然可以在20点准时完成打卡。另外,如果我的网站被攻击,并不会影响每日的打卡,Python运行的服务器、网站所在的服务器和数据库所在的服务器都分布在不同的国家。这大大提升了工作的效率,以及防御攻击的能力。

# 效率与使用

经过测试,在北京时间 20:00:01 即可完成所有用户的打卡。这个效率可以算得上是很顶了。

扫描下方的二维码,即可使用。

注意当你点击提交按钮后,请等待验证你的账号密码信息后,返回结果再离开。

# 声明

所有的声明已经在网站页面写得非常清楚了,在这不再强调。