先說緣由
? ? ? 最近在北京某駕校學(xué)習駕駛烟馅,考駕照说庭。目前處于科目二練車階段,需要通過某app自己約車:
? ? ? 神馬郑趁? 每 ?天 ?早 ?上 ?6 ?點 ?多 ?起來“搶”刊驴?誰受得了啊。穿撮。缺脉。
? ? ? 堅持了兩天之后痪欲,實在受不了這種又笨又野蠻的方法了,而且第二天搶了好久還沒有搶到“最佳課時”攻礼,本來睡得就晚业踢,結(jié)果導(dǎo)致那天臨近中午十二點才起床。礁扮。知举。不能容忍效率低呀!
? ? ? 好吧太伊,既然是刷票雇锡,咱就寫個腳本刷一刷。
目標功能:
1僚焦、每天全自動約車锰提,除首次啟動程序,后面無需手動
2芳悲、搶到最好的練車時段(中午)
3立肘、搶不到最好的時段(嘗試30次)就搶早晨的
工具準備
Fiddler + IntelliJ IDEA + Android設(shè)備 + JSON校驗工具 + Sublime Text + 其他
抓包
這個抓包工具應(yīng)該見過、用過吧名扛?不多說了囱怕。抚岗。
瀏覽器模擬請求
直接用抓到的url訪問良蛮,很好帮寻,有數(shù)據(jù)返回,json
沒毛病弄企,說明有戲超燃。。桩蓉。
代碼測試
開始寫代碼淋纲。。先不加cookie試試院究,還是和瀏覽器里直接執(zhí)行得到的結(jié)果一樣:
正式請求數(shù)據(jù)
加上cookie作為禮物洽瞬,正式請求預(yù)約車輛列表數(shù)據(jù):
很好业汰,得到數(shù)據(jù)了伙窃,不過比較亂,借助json解析工具觀察下:
在線json校驗样漆,還是不夠直觀为障。。
對照app分析下,比較清晰鳍怨。
分析這個預(yù)約車輛列表沒有特別的作用呻右,只是做個預(yù)熱。如果按照駕校的約車規(guī)則和系統(tǒng)特點鞋喇,這一步并不是執(zhí)行約車操作声滥,這一步完全是沒有必要的。約車固定車侦香、固定教練落塑,所以執(zhí)行約車請求時,發(fā)送的參數(shù)是特定的罐韩。下面直接抓取約車請求的數(shù)據(jù)包憾赁,分析并構(gòu)造URL。
為了測試散吵,先把之前約好的兩次車都取消了龙考。幸好現(xiàn)在深夜,沒人和我搶错蝴。洲愤。取消之后重新預(yù)約颓芭,抓到下面的數(shù)據(jù)包顷锰,分析參數(shù),easy程度超乎我的想象亡问,中間竟然沒有驗證碼驗證也沒有校驗攔截官紫,一切都很順利。結(jié)合業(yè)務(wù)背景州藕,參數(shù)很容易理解束世,輕松get:
下面就是最激動人心的時刻:模擬自動化約車。床玻。再次取消之前預(yù)約好的數(shù)據(jù)毁涉,不過這一次我要讓機器幫我預(yù)約:
寫實驗代碼:
run起來吧小寶貝兒 - -
得到返回數(shù)據(jù):
打開APP,預(yù)約成功锈死!
同時也看看預(yù)約失敗時的返回:
很明顯贫堰,code為0時表示預(yù)約成功,其他表示預(yù)約失敗待牵。
下面就是封裝代碼和寫定時任務(wù)了其屏,每天7點整準時開始約車。
? ? ? ? ? ? ?深夜coding..............
寫好了缨该。
測試1:失敗情況:
測試2:成功情況偎行,執(zhí)行一次就預(yù)約成功了:
最后:部署起來,讓程序定時執(zhí)行。蛤袒。熄云。
睡覺。隐孽。癌椿。。