应在不瞒报的前提下使用自动化健康打卡程序。
您应当知晓使用自动化程序可能造成学校处分等后果。
流程概览
抓包
使用软件 Fiddler 4 进行抓包。
前期具体步骤:
Android 用户可参考:使用fiddler实现手机抓包 - 简书
iOS 用户可参考:fiddler抓苹果手机上app包的方法... - CSDN
值得注意的是,许多浏览器已不支持 TLS1.0/1.1,因此需要手动在 Tools
- Options
- HTTPS
中修改 Protocols
为
<client>;ssl3;tls1.2
配置好后,试着进行打卡,发现向服务器传送了数据。
POST https: //▇▇▇.▇▇▇.edu.cn/v1/temperatures/ HTTP/1.1
Host: ▇▇▇.▇▇▇.edu.cn
Content-Type: application/json; charset=utf-8
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Accept: application/json
User-Agent: ▇▇▇
Authorization: JWT ▇▇▇▇
Referer: https: //servicewechat.com/▇▇▇/▇▇/▇▇▇.html
Content-Length: 234
{
"value": "36",
"condition": "A",
"home_condition": "A",
"watched": false,
"watched_location": "",
"stayed": false,
"stayed_contacted": false,
"family_conditions": "",
"is_contacted": false,
"contacted_health": "",
"personid": "",
"notes": "",
"location": {}
}
我们可以看到,关键的信息是 Header 中的 Authorization
和 JSON。
JSON 当中是填报的表单,其中 value
是体温值(摄氏度)。
试着退出打卡系统重新登录,发现向服务器传送数据如下。
POST https://▇▇▇.▇▇▇.edu.cn/▇▇▇/▇▇▇/login/ HTTP/1.1
Host: ▇▇▇.▇▇▇.edu.cn
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Accept: application/json
User-Agent: ▇▇▇
Referer: https://servicewechat.com/▇▇▇/▇▇/▇▇▇.html
Content-Length: 59
Accept-Language: zh-cn
{"username":"▇▇▇▇▇▇","password":"▇▇▇▇▇▇","type":""}
其中 username
和 password
均为明文,不需要做改动。
响应后返回的 JSON 为
{
"token": "▇▇▇",
"token_expiration_datetime": "2021-07-09 21:12:38"
}
这里的 token 加上前缀 JWT
即为上文中 header 内的 Authorization
的值。
至此,抓包部分结束。
程序设计
由于之前没有学过 Python ,但是觉得 Python 应该可以简单实现并在服务器上部署,决定用 Python 试一试。
在网上查阅资料后,相关设计步骤如下。
需要引用 requests
和 json
包,用于发送 POST 请求和解析 JSON 数据。
程序如下。
import requests
import json
url = 'https://▇▇▇.▇▇▇.edu.cn/v1/temperatures/'
datas = {
"value": "36",
"condition": "A",
"home_condition": "A",
"watched": 0,
"watched_location": "",
"stayed": 0,
"stayed_contacted": 0,
"family_conditions": "",
"is_contacted": 0,
"contacted_health": "",
"personid": "",
"notes": "",
"location": {}
}
headers={"Authorization": "JWT ▇▇▇"}
morning =requests.post(url,data=datas,headers=headers)
print(morning)
print(morning.text)
也可以设计成填入账号密码就可以自动获取 token 打卡的形式。
import requests
import json
url_morning = 'https://▇▇▇.▇▇▇.edu.cn/v1/temperatures/'
url_login = 'https://▇▇▇.▇▇▇.edu.cn/▇▇▇/▇▇▇/login/'
#下文中的学号和密码自行修改
datas_login = {"username":"▇▇▇▇▇▇","password":"▇▇▇▇▇▇","type":""}
datas_morning = {
"value": "36",
"condition": "A",
"home_condition": "A",
"watched": 0,
"watched_location": "",
"stayed": 0,
"stayed_contacted": 0,
"family_conditions": "",
"is_contacted": 0,
"contacted_health": "",
"personid": "",
"notes": "",
"location": {}
}
login = requests.post(url_login,data=datas_login)
print("登录状态",login)
dic = json.loads(login.text)
token = "JWT "+dic['token']
headers={"Authorization": token}
morning = requests.post(url_morning,data=datas_morning,headers=headers)
print("---------------------")
print("晨报状态",morning)
print("晨报返回值",morning.text)
自动运行
对于服务器,可以配置好 Python 后设置定时任务。注意安装对应的包。
个人电脑来讲,每天手动运行或者用其他方法令其自动运行即可。