今日校園疫情自動提交Java版本

2020-08-10 16:29:55

專案介紹

今日校園每日自動提交疫情上報JAVA指令碼(如果能重來我要選PYTHON)

專案github地址: https://github.com/zerodayZHOUXUTIAN/campushoy

專案流程圖:
在这里插入图片描述

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": ""
}