项目介绍
今日校园每日自动提交疫情上报JAVA脚本(如果能重来我要选PYTHON)
项目github地址: https://github.com/zerodayZHOUXUTIAN/campushoy
安徽师范大学今日校园自动提交网页版本(登录账号为学号,密码默认为身份证号后六位): http://yoysh.cn
项目流程图:
1.抓包(花了我最多的时间)
- 问题一:app无法打开
- 问题二:app无法联网
万事开头难,今日校园是HTTPS的报文,Android 7.1 以上机型是无法直接抓取报文,除非获得root权限,这样做就绕远了。最后只能借助模拟器,试了网易的mumu模拟器等发现安装之后无法打开app或者无法联网。无法联网查找了网上的解决方案,用逍遥安卓4.4模拟器,配合xposed框架和justtrustme模块,可以解决该问题。无法打开的问题,可以去豌豆荚下载到历史版本8.0.8。具体可以参考 https://blog.zimo.wiki/posts/d61cc8e9/。抓包的软件推荐Fiddler或者Charles。
我们需要两个参数Cpdaily-Extension(也就是CpdailyInfo)和MOD_AUTH_CAS
Cpdaily-Extension是一直存在有效的,只要不手动退出
MOD_AUTH_CAS有过期时间,经过测试过期时间不是六小时就是八个小时。就是说你再这个时间内没有访问任何接口,你就需要重新抓取MOD_AUTH_CAS。在项目中我会每隔一个小时去查询他是否有填报的信息,这样MOD_AUTH_CAS就不会过期(目前应该是这样子的)
关于MOD_AUTH_CAS,应该是CAS( Central Authentication Service)的Ticket的值。
CAS是为了解决单点登录的中央认证服务。以后可以专门写一篇关于单点登录的博客。
具体的信息可以参考这篇博客:https://www.cnblogs.com/wangsongbai/p/10299655.html
CAS的主要票据有TGT、ST、PGT、PGTIOU、PT。这里用的是ST。ST是CAS为用户签发的访问某一service的票据。用户访问service时,service发现用户没有ST,则要求用户去CAS获取ST。用户向CAS发出获取ST的请求,如果用户的请求中包含cookie,则CAS会以此cookie值为key查询缓存中有无TGT,如果存在TGT,则用此TGT签发一个ST,返回给用户。用户凭借ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。
2.查询每日的表单
接口:/wec-counselor-collector-apps/stu/collector/queryCollectorProcessingList
参数:{"pageSize": 6,"pageNumber": 1}
返回:
{
"code": "0",
"message": "SUCCESS",
"datas": {
"totalSize": 1,
"pageSize": 6,
"pageNumber": 1,
"rows": [
{
"wid": "40084",
"formWid": "1005",
"priority": "4",
"subject": "(8月5日)安徽师范大学疫情防控情况调查表",
"content": "https://wecres.cpdaily.com/counselor/10186173524/content/2861fb76d97105b5db7bc9.html",
"senderUserName": "经济管理学院(XXX)",
"createTime": "2020-08-04 12:48",
"startTime": "2020-08-05 00:01",
"endTime": "2020-08-05 13:00",
"currentTime": "2020-08-05 09:10:53",
"isHandled": 0,
"isRead": 0
}
]
}
}
我们需要其中的wid、formWid跟isHandled(isHandled表示是否提交,非0为提交)。
3.获取学校的任务Id
接口:/wec-counselor-collector-apps/stu/collector/detailCollector
参数:{"collectorWid": 这里是上面的wid}
返回:
{
"code": "0",
"message": "SUCCESS",
"datas": {
"collector": {
"wid": "39915",
"formWid": "1002",
"priority": "4",
"endTime": "2020-08-04 13:00:00",
"currentTime": "2020-08-04 17:45:30",
"schoolTaskWid": "78215",
"isConfirmed": 1,
"senderUserName": "经济管理学院(XXX)",
"createTime": "2020-08-03 09:16:47",
"attachmentUrls": null,
"attachmentNames": null,
"attachmentSizes": null,
"isUserSubmit": 1,
"fetchStuLocation": false,
"address": null
},
"form": {
"wid": "1002",
"formTitle": "(8月4日)安徽师范大学疫情防控情况调查表",
"formContent": "https://wecres.cpdaily.com/counselor/10186173524/content/2861fb76d97105b5db7bc9.html",
"backReason": null,
"isBack": 0,
"attachments": []
}
}
}
我们需要其中的schoolTaskWid。
4. 获取表单详细信息
接口:/wec-counselor-collector-apps/stu/collector/getFormFields
参数:{"pageSize":20,"pageNumber":1,"formWid":formWid,"collectorWid":这里是上面的wid}
返回(辅导员设置的问题不同,表单信息也就不同,Json格式是固定的):
{
"code": "0",
"message": "SUCCESS",
"datas": {
"totalSize": 3,
"pageSize": 10,
"pageNumber": 1,
"existData": 1,
"rows": [
{
"wid": "10899",
"formWid": "1002",
"fieldType": 1,
"title": "当前,你所在的位置是?",
"description": "",
"minLength": 1,
"sort": "1",
"maxLength": 300,
"isRequired": 1,
"imageCount": -2,
"hasOtherItems": 0,
"colName": "field001",
"value": "浙江省/杭州市/江干区",
"minValue": 0.0000,
"maxValue": 0.0000,
"isDecimal": true,
"fieldItems": []
},
......
]
}
]
}
5. 提交表单信息
接口:/wec-counselor-collector-apps/stu/collector/submitForm
参数:formWid,collectorWid(这里是上面的wid),schoolTaskWid,结合第四步构造的form。
返回:
{
"code": "0",
"message": "SUCCESS",
"wid": null,
"hasWindowLocation": 0,
"windowLocation": ""
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。