今天你体温上报了吗?
沉寂一个学期后,终于有空折腾点东西了。不知不觉每天起床第一件事——健康打卡已经快一年了。下至-274℃上至9999999999999℃,都无人过问,有时忘了打卡还要被不停的催。身为程序猿怎么能忍受此般形式主义每天霸占我宝贵的1分钟!(所以我花了两天时间写了这个程序)
下面步入整体,本来我觉得这不就抓个包每天定时发送就行了吗。然而事情并没有想象中那么简单,这个登录状态每天都会失效,所以不能存个cookie就完事。一番研究下,学校的登录认证系统还有点东西。应该是采用客户端cookie+服务端session的方式。
参考了小猴偷米的认证代码,得知网页认证过程如下:
- 登录页面包含动态生成的密钥等隐藏表单信息,客户端将账号、使用动态密钥加密和的密码再次POST至登录页地址;
- IDS 服务器解析表单参数,判断用户成功登陆,并生成 Ticket 作为参数,请求前端 302 跳到新信息门户;
- 前端再次 GET 请求带 Ticket 参数的新信息门户链接;
- 新信息门户取 Ticket 参数,私下与 IDS 服务器进行验证,验证成功后向前端颁发统一身份认证 Cookie。
知道了原理后就好办了,依葫芦画瓢把js写的代码翻译成python就行。唯一碰到的难点就是加密算法的实现。原项目中的js代码都是经过混淆的,通过人眼辨认实在太麻烦,我又尝试几种现成的AES加密模式什么CBC,OFB等等,发现输出结果都不太像,看来这其中另有玄机。
既然翻译代码不成,那么万能的python能不能直接运行js代码呢?一查还真有!js2py
模块简直是我的救星!
几行代码轻松执行js程序:
1 | import js2py |
获取到登录session后,自然是我说了算了,校内接口轻松访问。
目前主要实现了 体温上报 和 GPA计算 的功能。
具体功能介绍请见GitHub仓库
下面贴几张运行结果图:
每日上报(部署服务器定时任务后简直美滋滋~)
GPA计算
2021.11.23
fork
数破百留念2021.12.26
200 fork
达成!想不到只过了1个月,fork数和star数刚好翻倍了,想不到我的第一个热门项目竟是他。。。看来果然偷懒才是第一生产力。
2021.3.13 fork 破300,看得出疫情又反复了,希望能再次早日清零吧。
今天你体温上报了吗?