项目介绍

今日校园每日自动提交疫情上报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": ""
}

TANGCHAO
1 声望0 粉丝