109 lines
3.3 KiB
Markdown
109 lines
3.3 KiB
Markdown
# 关于职教智慧云的签到研究
|
||
|
||
本项目记录对“职教智慧云” App 及其 Flutter 框架的研究,以及如何从日志中获取 Cookie、请求课程与打卡信息并完成打卡的基本实践。理论上可以直接跳过蓝牙设备验证进行远程打卡
|
||
|
||
- 目标:从日志中截取 `token`,获取课程与打卡信息,并执行打卡。
|
||
- 平台:Android;命令示例包含 Windows PowerShell 与 Linux/macOS 两种形式。
|
||
|
||
## 1. 抓取 Cookie(token)
|
||
|
||
连接 Android 设备后,查看 Flutter 在 Dart 层输出的日志并筛选包含 `cookie` 的行。
|
||
|
||
Windows(PowerShell):
|
||
在此之前您需要安装安卓调试工具(platform-tools)
|
||
|
||
```powershell
|
||
adb shell
|
||
logcat -s flutter | grep -i cookie
|
||
```
|
||
|
||
Linux/macOS:
|
||
|
||
```bash
|
||
adb logcat -s flutter | grep -i cookie
|
||
```
|
||
|
||
从输出中截取形如 `token=XXXX` 的值,后续作为请求头中的 Cookie 使用。
|
||
|
||
## 2. 获取课程与打卡信息
|
||
|
||
接口地址:`https://m-zjt.kefang.net/api/zms/zhijiaotong/page/homePageData`
|
||
|
||
通用请求头(表单):
|
||
|
||
```http
|
||
User-Agent: Dart/3.6 (dart:io)
|
||
Accept-Encoding: gzip
|
||
Content-Type: application/x-www-form-urlencoded
|
||
Cookie: token=YOUR_TOKEN
|
||
```
|
||
|
||
示例(PowerShell/curl):
|
||
|
||
```powershell
|
||
curl --silent `
|
||
-H "User-Agent: Dart/3.6 (dart:io)" `
|
||
-H "Accept-Encoding: gzip" `
|
||
-H "Content-Type: application/x-www-form-urlencoded" `
|
||
-H "Cookie: token=YOUR_TOKEN" `
|
||
"https://m-zjt.kefang.net/api/zms/zhijiaotong/page/homePageData"
|
||
```
|
||
|
||
示例(Linux/macOS/curl):
|
||
|
||
```bash
|
||
curl -s \
|
||
-H "User-Agent: Dart/3.6 (dart:io)" \
|
||
-H "Accept-Encoding: gzip" \
|
||
-H "Content-Type: application/x-www-form-urlencoded" \
|
||
-H "Cookie: token=YOUR_TOKEN" \
|
||
"https://m-zjt.kefang.net/api/zms/zhijiaotong/page/homePageData"
|
||
```
|
||
|
||
从响应中提取 `contentId` 以及后续需要的 `attendanceId` 等字段。
|
||
|
||
## 3. 提交打卡
|
||
|
||
接口地址:`https://m-zjt.kefang.net/api/zms/attendance/attendanceRecord/punchCourseByStudent`
|
||
|
||
方法:`PUT`;`Content-Type`:`application/x-www-form-urlencoded`
|
||
|
||
示例(PowerShell/curl):
|
||
|
||
```powershell
|
||
curl -X PUT `
|
||
-H "User-Agent: Dart/3.6 (dart:io)" `
|
||
-H "Accept-Encoding: gzip" `
|
||
-H "Content-Type: application/x-www-form-urlencoded" `
|
||
-H "Cookie: token=YOUR_TOKEN" `
|
||
-d "attendanceId=YOUR_ATTENDANCE_ID" `
|
||
"https://m-zjt.kefang.net/api/zms/attendance/attendanceRecord/punchCourseByStudent"
|
||
```
|
||
|
||
示例(Linux/macOS/curl):
|
||
|
||
```bash
|
||
curl -X PUT \
|
||
-H "User-Agent: Dart/3.6 (dart:io)" \
|
||
-H "Accept-Encoding: gzip" \
|
||
-H "Content-Type: application/x-www-form-urlencoded" \
|
||
-H "Cookie: token=YOUR_TOKEN" \
|
||
-d "attendanceId=YOUR_ATTENDANCE_ID" \
|
||
"https://m-zjt.kefang.net/api/zms/attendance/attendanceRecord/punchCourseByStudent"
|
||
```
|
||
|
||
您可在项目文件 main.py 中查看示例脚本
|
||
返回结果若包含“操作成功”的 `message`,则表示打卡成功。
|
||
|
||
## 4. 常见问题
|
||
|
||
- `token` 过期:重新通过日志抓取;或在 App 内重新登录再抓取。
|
||
- 403/401:检查 `Cookie` 是否正确;确认 `Content-Type` 是否为表单。
|
||
- 字段变动:以实际接口响应为准,名称或层级可能更新。
|
||
|
||
## 5. 注意事项
|
||
|
||
- 仅用于学习与研究,请勿用于任何不当用途。
|
||
- 请妥善保护个人隐私与账号安全。
|
||
- 操作前请确保已安装 `adb` 并正确连接设备。
|