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

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

分享到:
评论

相关推荐

    HttpClient4.3模拟登陆新版12306

    本篇文章将详细讲解如何利用HttpClient 4.3版本来模拟登录新版12306(中国铁路客户服务中心网站)。 1. **HttpClient介绍** HttpClient是Apache的一个开源项目,它提供了强大的HTTP协议处理能力和灵活的HTTP客户端...

    12306订票助手合集

    1. **12306接口与API** - 12306订票助手需要与12306官网进行交互,这就涉及到对12306的接口和API的理解。虽然12306官方并未开放正式的API,但开发者可以通过分析网页请求和响应来模拟用户行为,如查询车次、获取余...

    12306城市代码

    这个文件对于开发者来说是宝贵的资源,尤其是那些需要与12306接口对接的第三方应用开发者。通过这个文件,他们可以轻松地将用户输入的地理位置转换为12306系统能识别的城市代码,从而实现数据交互。 城市代码的使用...

    12306-master_C#_12306_

    你可以通过分析和修改源代码,了解如何实现类似12306的功能,如用户登录、车次查询、票务预订、支付接口集成等,并且可以在此基础上扩展自己的功能或优化性能。 【标签】"C#" 和 "12306" 标签明确指出了项目的编程...

    编程乐趣:C#实现查询12306票价信息

    通过C#与12306接口进行交互,我们可以构建一个程序来自动获取票价数据,方便用户进行查询。 首先,我们需要了解12306的API接口。虽然12306官方并未公开提供正式的开发者API,但有一些开发者通过分析网页结构和请求...

    12306订票助手源码

    通过对12306订票助手源码的学习,开发者可以了解网络爬虫、自动化测试、数据分析等相关技术,并能掌握如何与复杂Web应用进行交互。同时,这也是一个很好的实践案例,展示了如何通过编程解决实际生活中的问题。然而,...

    12306车站代码

    2. **数据接口调用**:开发者可以通过12306提供的API接口,使用车站代码查询车次、余票等信息,为第三方应用提供服务。 3. **程序开发**:在编程时,可以将车站代码作为参数,方便快捷地进行数据处理和信息检索。 ...

    srca12306.rar

    这个压缩包可能包含用于构建或分析12306网站的源代码、配置文件或其他相关素材。 描述 "srca12306" 似乎是对压缩包内容的简短概括,没有提供太多具体信息,但我们可以推测它与12306系统背后的软件开发工作有关。 ...

    python 12306 查询余票代码

    在这个项目中,我们主要使用`requests.get()`方法来发起GET请求,获取12306接口的数据。在调用这个方法时,我们需要指定URL,即12306的查询接口地址,通常包含出发地、目的地、日期等参数。 接着,12306的接口通常...

    12306订票助手.NET版

    TOBA.Interface.dll和TOBA.Interface.pdb则是接口库和对应的调试符号文件,可能代表了一个名为TOBA的系统或框架,12306订票助手通过这个接口与之交互,实现更高级别的功能,如登录验证、票务查询等。pdb文件则在开发...

    12306 抢票助手C#源码

    7. **用户体验优化**:为了提高用户体验,抢票助手可能还包括实时更新的余票信息展示、购票成功提示、购票失败原因分析等功能,这些都需要利用到UI设计和数据可视化技术。 总之,12306抢票助手C#源码展示了如何利用...

    12306 自动订票

    12306是中国铁路官方的在线售票平台,其接口和规则可能需要开发者通过网络爬虫或API接口进行研究和适应。 压缩包内的文件名“12306自动订票系统.rar”可能包含了整个自动订票程序的可执行文件或者源代码,用户可以...

    2014211218-史文翰-网络存储-12306存储架构分析1

    【12306存储架构分析】 12306是中国铁路客户服务中心的在线订票平台,其存储架构设计是确保高效、安全和稳定服务的关键。该架构主要由以下几个部分组成: 1. **应用层**:包括车站售票系统、代售点系统以及12306...

    Android-12306android实现登录流程

    - 分析服务器返回的状态码和消息,判断登录是否成功。成功则保存Session ID,以便后续的API调用;失败则提示错误信息。 6. **本地存储**: - 如果用户勾选了“记住密码”,需要将用户名和加密后的密码安全地存储...

    Python-基于flask框架的12306抢票程序

    【Python-基于flask框架的12306抢票程序】 在当今互联网时代,12306是中国铁路官方的网上购票平台,每逢节假日,尤其是春运期间,火车票一票难求。为了提高购票效率,许多技术爱好者利用编程技能开发了抢票软件。本...

    12306抢票抢票抢票抢票

    然后,12306的接口分析也是技术点之一。虽然12306官方并不提供公开的API,但开发者可以通过逆向工程解析其HTTP请求,模拟出购票流程。这需要对HTTP协议、JSON数据格式以及网页动态加载技术有一定的理解。 在压缩...

    仿12306铁路售票管理系统说明资源来源网络以及部分开源社区、仅供参考与学习、项目不可商用、一切后果由使用者承担、若是侵权请

    此类系统通常涵盖多个关键模块,包括用户管理、车次管理、座位管理、订单处理、支付接口以及后台数据分析。下面将详细介绍这些核心模块及其技术实现。 一、用户管理 用户管理模块负责处理用户的注册、登录、密码...

    12306用户管理系统

    通过以上分析,我们可以看到12306用户管理系统是一个综合性的项目,涵盖了软件工程的多个方面,对于提升Java开发者在企业级应用开发中的技能具有重要价值。通过实际的实训项目,开发者可以更深入地理解和掌握这些...

    TicketHelper12306购票源码

    源码的分析与理解对于开发者来说,是学习网络爬虫、自动化脚本、多线程处理以及与API接口交互等技术的宝贵资源。 首先,我们需要了解TicketHelper的核心功能。这个工具可能包含了模拟用户登录12306网站、自动填充...

    12306余票查询

    尽管“12306余票查询”接口已不可用,但我们仍可从中学到很多关于大型系统设计、接口开发、安全防护以及数据分析的知识。这些技术不仅适用于铁路票务系统,也可广泛应用于其他领域,如电子商务、航空票务等,为我们...

Global site tag (gtag.js) - Google Analytics