SpringBoot实现12306自动抢票系统
写在前面
前段时间在浏览开源社区的时候,不小心看到一个 12306抢票
系统,一下就被吸引住了,然后就动力歪念头😏,过年终于不用找黄牛了,哇哈哈哈,写了差不多一个星期,终于可以全自动抢票了,中间遇到的坑也是挺多的,在这里分享一下,供大家参考学习。
如何分析12306接口
使用 Chrome
或者 Firefox
浏览器,我这里用的是 Firefox
,打开12306官网,然后打开开发者选项,点击网络
选项卡,就可以观察到所有的请求接口情况了。
然后按照正常的流程,开始下单,没点击一部,然后看下面的控制台的请求情况,和分析接口的意义,这是一个很苦逼的过程😭。
必要的接口
我这了整理了一些必要的一些接口,也是按照购票顺序写的。
1.获取站点信息
购票一部分站点参数使用的是编码,并不是汉字,需要使用这个接口获取对应的值1
/https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9098
2.获取cookies
这个是为了获取必要的两个 cookie 的值的:RAIL_EXPIRATION
和 RAIL_EXPIRATION
。
这个接口就比较吊了,有特么好神奇,至今没搞懂后面的参数哪里来的,目前的是这俩 cookie 都是手动写死的,等研究出来,补充一下。
1 https://kyfw.12306.cn/otn/HttpZF/logdevice?algID=&hashCode=Ja4gW6Upz9XdOiA2-UBi5DjyNsB3Fmf3L0wxipiFro4&FMQw=0&q4f3=zh-CN&VySQ=FGEYxQuwmyAY0Gevguxv6Ch8vDiXELlH&VPIf=1&custID=133&VEek=unspecified&dzuS=32.0%20r0&yD16=0&EOQP=c227b88b01f5c513710d4b9f16a5ce52&lEnu=2886729839&jp76=b34839808806e7ff02df813671ec99b3&hAqN=MacIntel&platform=WEB&ks0Q=a103db222cd8296a50268c8f0355b741&TeRS=877x1440&tOHY=24xx900x1440&Fvje=i1l1s1&q5aJ=-8&wNLf=99115dfb07133750ba677d055874de87&0aew=Mozilla/5.0%20(Macintosh;%20Intel%20Mac%20OS%20X%2010.14;%20rv:67.0)%20Gecko/20100101%20Firefox/67.0&E3gR=6c9c3674a3e453e368c3a0cc46f30eb8×tamp=1560399328000
3.车票查询
1 | https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT |
4.登录配置查询
这个接口就是为了查看登录是否需要验证码的1
https://kyfw.12306.cn/otn/login/conf
5.读取验证码
1 | https://kyfw.12306.cn/passport/captcha/captcha-image64?login_site=E&module=login&rand=sjrand&_=%s |
6.校验验证码
1 | https://kyfw.12306.cn/passport/captcha/captcha-check?answer=%s&rand=sjrand&login_site=E&_=%s |
7.登录
1 | https://kyfw.12306.cn/passport/web/login |
8.校验是否登录成功
1 | https://kyfw.12306.cn/passport/web/auth/uamtk-static?appid=otn |
9.获取uamtk
获取这个东西是为了后面获取用户 tk
做准备的。1
https://kyfw.12306.cn/passport/web/auth/uamtk
10.获取当前登录的tk
这东西后面买票是必须使用的。1
https://kyfw.12306.cn/otn/uamauthclient
11.买票前校验用户是否正常登录
这个接口只是为了校验,没有实际意义。1
https://kyfw.12306.cn/otn/login/checkUser
12.点击预定按钮
1 | https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest |
13.获取两个token
这个接口会获取两个 token
。globalRepeatSubmitToken
:获取乘客信息、检查订单、获取排队情况、提交订单使用。key_check_isChange
:提交订单使用。1
https://kyfw.12306.cn/otn/confirmPassenger/initDc
14.获取乘客信息
1 | https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs |
15.提交前检查订单
1 | https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo |
16. 获取排队情况
1 | https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount |
17.提交订单
1 | https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue |
18.获取订单
这个获取订单接口必须成功,才能确定下单成功的。1
https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime
源代码
因为代码有部分敏感信息,所以我这就重新打包上传到QQ群了。加QQ群下载:852214454