`
a137268431
  • 浏览: 146333 次
文章分类
社区版块
存档分类
最新评论

2014新版12306接口分析

 
阅读更多

文章只做技术研究 如果通过此技术违反国家法律,一切后果自负,作者不承担任何责任。

好吧,先来唠叨,唠叨。这几天大家都沉浸在抢票中,当然我也不例外。

最后总结一句,有抢票软件不一定能抢到票,没抢票软件一定是抢不到票,网页一点就死了。

往年,还能弄个小工具抢抢,今年12306换了件新衣服,更加跑不动了,最后独留下孤单在心里。

好吧 ,进入正题:玩转新版12306抢票

订火车票无非是如下几个流程:

登录 - 查询 - 点预定按钮 - 提交订票用户 - 确认订单 或者是 自动所谓的自动刷票 登录 - 查询 - 输入验证码提交

下面一起分析分析这两套流程:

首先准备抓包工具

登录拆分为:

https://kyfw.12306.cn/otn/ 抓cookie



https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand 获取验证码


https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn 预验证验证码


https://kyfw.12306.cn/otn/login/loginAysnSuggest 登录




https://kyfw.12306.cn/otn/login/userLogin 正式登录(没有这个请求是无法登录的)



订票流程

查票 https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2014-01-04&leftTicketDTO.from_station=SZQ&leftTicketDTO.to_station=BHQ&purpose_codes=ADULT

注意这个请求的cookie 这个cookie会伴随抢票流程的始终。有时候有些人会返回-10等等一些奇怪的错误,我这里想说 get请求参数是可以验证先后顺序的,注意顺序就好了。


点击预定按钮

https://kyfw.12306.cn/otn/confirmPassenger/initDc 这个请求主要是获取订单提交时候的2个令牌值(REPEAT_SUBMIT_TOKEN,key_check_isChange)


获取提交订单验证码

https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp&0.4528230968713445


预验证验证码

https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn


检查订单

https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo


有人会想问oldPassengerStr和passengerTicketStr是什么,这里给一段代码把

  1. /**
  2. *获取OldPassengerStr
  3. *
  4. *@paramuserInfo
  5. *@return
  6. */
  7. publicstaticStringgetOldPassengerStr(List<UserInfo>userInfo){
  8. StringoldStrs="";
  9. for(inti=0;i<userInfo.size();i++){
  10. StringoldStr=userInfo.get(i).getName()+","+userInfo.get(i).getCardType()+","+userInfo.get(i).getCardID()+","+userInfo.get(i).getType();
  11. oldStrs+=oldStr+"_";
  12. }
  13. returnoldStrs;
  14. }
  15. /**
  16. *获取PassengerTicketStr
  17. *
  18. *@paramuserInfo
  19. *@return
  20. */
  21. publicstaticStringgetPassengerTicketStr(List<UserInfo>userInfo){
  22. StringoldStrs="";
  23. for(inti=0;i<userInfo.size();i++){
  24. StringoldStr="";
  25. if("WZ"==userInfo.get(i).getSeatType()){
  26. }else{
  27. oldStr=userInfo.get(i).getSeatType();
  28. }
  29. StringbR=oldStr+",0,"+userInfo.get(i).getTickType()+","+userInfo.get(i).getName()+","+userInfo.get(i).getCardType()+","+userInfo.get(i).getCardID()+","
  30. +(userInfo.get(i).getPhone()==null?"":userInfo.get(i).getPhone())+",N";
  31. oldStrs+=bR+"_";
  32. }
  33. returnoldStrs.substring(0,oldStrs.length()-1);
  34. }

其实把 这两个参数怎么拼接的 可以在js里面找到答案。


获取时时余票

https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount


确认订单

https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue



其实 说到这个应该也就快完了 剩下的刷票流程短一点,大家可以自己抓包分析。曾经这里出现过无须验证码提交订票信息的漏洞,最近这两天好像修复好了。

其实吧,技术只是一方面,重要的是理解流程。


转载请注明出处:http://blog.csdn.net/hncdyj/article/details/17952815

源码分享:http://www.zuidaima.com/share/1642189453937664.htm

持续更新程序下载地址:https://code.google.com/p/mygod-go-home/downloads/list

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics