先说缘由
最近在北京某驾校学习驾驶,考驾照。目前处于科目二练车阶段,需要通过某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:成功情况,执行一次就预约成功了:
最后:部署起来,让程序定时执行。。。
睡觉。。。。