先說緣由
? ? ? 最近在北京某駕校學習駕駛,考駕照。目前處于科目二練車階段,需要通過某app自己約車:
? ? ? 神馬? 每 ?天 ?早 ?上 ?6 ?點 ?多 ?起來“搶”?誰受得了啊。。。
? ? ? 堅持了兩天之后,實在受不了這種又笨又野蠻的方法了,而且第二天搶了好久還沒有搶到“最佳課時”,本來睡得就晚,結果導致那天臨近中午十二點才起床。。。不能容忍效率低呀!
? ? ? 好吧,既然是刷票,咱就寫個腳本刷一刷。
目標功能:
1、每天全自動約車,除首次啟動程序,后面無需手動
2、搶到最好的練車時段(中午)
3、搶不到最好的時段(嘗試30次)就搶早晨的
工具準備
Fiddler + IntelliJ IDEA + Android設備 + JSON校驗工具 + Sublime Text + 其他
抓包
這個抓包工具應該見過、用過吧?不多說了。。
瀏覽器模擬請求
直接用抓到的url訪問,很好,有數據返回,json
沒毛病,說明有戲。。。
代碼測試
開始寫代碼。。先不加cookie試試,還是和瀏覽器里直接執行得到的結果一樣:
正式請求數據
加上cookie作為禮物,正式請求預約車輛列表數據:
很好,得到數據了,不過比較亂,借助json解析工具觀察下:
在線json校驗,還是不夠直觀。。
對照app分析下,比較清晰。
分析這個預約車輛列表沒有特別的作用,只是做個預熱。如果按照駕校的約車規則和系統特點,這一步并不是執行約車操作,這一步完全是沒有必要的。約車固定車、固定教練,所以執行約車請求時,發送的參數是特定的。下面直接抓取約車請求的數據包,分析并構造URL。
為了測試,先把之前約好的兩次車都取消了。幸好現在深夜,沒人和我搶。。取消之后重新預約,抓到下面的數據包,分析參數,easy程度超乎我的想象,中間竟然沒有驗證碼驗證也沒有校驗攔截,一切都很順利。結合業務背景,參數很容易理解,輕松get:
下面就是最激動人心的時刻:模擬自動化約車。。再次取消之前預約好的數據,不過這一次我要讓機器幫我預約:
寫實驗代碼:
run起來吧小寶貝兒 - -
得到返回數據:
打開APP,預約成功!
同時也看看預約失敗時的返回:
很明顯,code為0時表示預約成功,其他表示預約失敗。
下面就是封裝代碼和寫定時任務了,每天7點整準時開始約車。
? ? ? ? ? ? ?深夜coding..............
寫好了。
測試1:失敗情況:
測試2:成功情況,執行一次就預約成功了:
最后:部署起來,讓程序定時執行。。。
睡覺。。。。