如何通过shell脚本自动申请六环外进京证?

摘要:活动在帝都的外地车对进京证应该不陌生,六环外进京证虽然不限次数,但是超过中午就办不了当天的了,你是否还在为出门前才发现忘了办理当天的进京证而懊恼?你是否为办理每周的进京证定过闹钟?如今这一切不堪回首都将过去,欢迎使用 jinjing365
问题背景 外地车辆进入北京,需要办理《进京证》,不办理证件驶入后会被执法设备抓拍,一次罚 100 扣 1 分,目前唯一的线上办理通道是下载《北京交警》App,注册后添加车辆,就可以为自己的爱车随时随地办理进京证了。注意如果有违法记录,需要缴纳罚款后才可以办理,缴纳罚款的线上办理通道是《交管12123》。 最早的时候,进京证只限制进五环的外地车辆,一年可以办理 12 次,一次 7 天。后来扩大范围到了六环,刚开始监控设备没健全还能进一下,目前是不行了,基本一进六环就会被拍。那六环外是不是随便跑呢?也不是的,像一些远郊县城如昌平、延庆、顺义、密云、怀柔、平谷,虽然地处六环之外,但是县城城区也有一个环,凡进此环者,也要办理进京证,对我这种混迹在县城周边的外地车主就非常不友好了,周末去县城里的购物中心、电影院也得办理进京证。也许是倾听了民意,后来改革了,进京证变为六环内与六环外两种:六环内还是一年 12 次,每次 7 天;六环外是一次 7 天但不限次数。一个例外是通州,虽然在六环外,也得按六环内办理,毕竟是城市副中心嘛! 虽然不限次数了,但也不是随意办理的,主要有以下规则: 有未缴纳罚款不能办理 中午 12 点后不能申请当天进京证 可以提前申请,最多提前 3 天 一个帐户可以挂多辆车,但只能为其中一辆车办理 已办理六环外进京证,可以续办六环内进京证,成功后六环外进京证失效;反之不行,也没必要,因为持有六环内进京证可以跑六环外 如果申请的不是当天的进京证,可以取消,但一天内只有一次取消机会,用完就不能再取消了 进京证在最后一天有效期时可以办理新的进京证,也称续期 特殊时期不能办理,比如疫情管控期间 (已翻篇,只是举例) 线上办理速度还是比较快的,基本一分钟左右就能出结果。但对我这种健忘症患者,往往临出门才想起来要办进京证,一看时间,已经过中午 12 点了,就比较尴尬了。 这个时候就想,有一个定时办理进京证的工具就好了,例如每周一凌晨自动办理这一周的进京证。 解决方案 需求搞明白了,下面着手实现。 抓包 首先要搞明白服务端的接口,需要通过抓包对《北京交警》进行报文分析。 之前抓包一直是用 mac 上的 Charles,后来偶然看到有个 VNET App,不需要安装证书、不需要启动代理就能抓包,拿来试了下,果然好用: 注意登录过程不要开启抓包,否则《北京交警》的登录界面会调不出来。除此之外,其它请求基本上都能抓到,从中挑选了两个我们需要关注的接口。 获取当前进京证 这个 stateList 接口可以获取用户账户下所有车辆的进京证信息,有些字段对于下一步申请进京证是必需的,另外了解当前进京证状态也有利于决定是否申请新的进京证。 header > POST /pro//applyRecordController/stateList HTTP/1.1 > Host:jjz.jtgl.beijing.gov.cn > Accept: */* > Accept-Language:zh-CN,zh;q=0.8 > User-Agent:okhttp-okgo/jeasonlzy > source:8724a2428c3f47358741f978fd082810 > authorization:f36abdfa-8878-46bf-91d9-5666f808e9a4 > Content-Type:application/json;charset=utf-8 > Connection:Keep-Alive > Accept-Encoding:gzip > Content-Length:97 比较重要的是 source 和 authorization 字段,前者标识了设备,后者标识了用户 token,也是主要的抓取对象之一,会用于之后的请求中。 data { "v": "3.4.1", "sfzmhm": "150121198603226428", "s-source": "bjjj-android", "timestamp": "1676016273000" } 请求时发送的 json 数据,亲测没什么用,发个空也能得到响应,看起来身份信息通过 http 头的 authorization 字段获取的。
阅读全文