今日校園每日自動提交疫情上報JAVA指令碼(如果能重來我要選PYTHON)
專案github地址: https://github.com/zerodayZHOUXUTIAN/campushoy
專案流程圖:
萬事開頭難,今日校園是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驗證,驗證通過後,允許使用者存取資源。
介面:/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爲提交)。
介面:/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。
介面:/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": []
},
......
]
}
]
}
介面:/wec-counselor-collector-apps/stu/collector/submitForm
參數:formWid,collectorWid(這裏是上面的wid),schoolTaskWid,結合第四步構造的form。
返回:
{
"code": "0",
"message": "SUCCESS",
"wid": null,
"hasWindowLocation": 0,
"windowLocation": ""
}