文章只做技术研究 如果通过此技术违反国家法律,一切后果自负,作者不承担任何责任。
好吧,先来唠叨,唠叨。这几天大家都沉浸在抢票中,当然我也不例外。
最后总结一句,有抢票软件不一定能抢到票,没抢票软件一定是抢不到票,网页一点就死了。
往年,还能弄个小工具抢抢,今年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是什么,这里给一段代码把
-
-
-
-
-
-
-
publicstaticStringgetOldPassengerStr(List<UserInfo>userInfo){
-
StringoldStrs="";
-
for(inti=0;i<userInfo.size();i++){
-
StringoldStr=userInfo.get(i).getName()+","+userInfo.get(i).getCardType()+","+userInfo.get(i).getCardID()+","+userInfo.get(i).getType();
-
oldStrs+=oldStr+"_";
-
}
-
returnoldStrs;
-
}
-
-
-
-
-
-
-
-
publicstaticStringgetPassengerTicketStr(List<UserInfo>userInfo){
-
StringoldStrs="";
-
for(inti=0;i<userInfo.size();i++){
-
StringoldStr="";
-
if("WZ"==userInfo.get(i).getSeatType()){
-
}else{
-
oldStr=userInfo.get(i).getSeatType();
-
}
-
StringbR=oldStr+",0,"+userInfo.get(i).getTickType()+","+userInfo.get(i).getName()+","+userInfo.get(i).getCardType()+","+userInfo.get(i).getCardID()+","
-
+(userInfo.get(i).getPhone()==null?"":userInfo.get(i).getPhone())+",N";
-
oldStrs+=bR+"_";
-
}
-
returnoldStrs.substring(0,oldStrs.length()-1);
-
}
其实把 这两个参数怎么拼接的 可以在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
分享到:
相关推荐
本篇文章将详细讲解如何利用HttpClient 4.3版本来模拟登录新版12306(中国铁路客户服务中心网站)。 1. **HttpClient介绍** HttpClient是Apache的一个开源项目,它提供了强大的HTTP协议处理能力和灵活的HTTP客户端...
1. **12306接口与API** - 12306订票助手需要与12306官网进行交互,这就涉及到对12306的接口和API的理解。虽然12306官方并未开放正式的API,但开发者可以通过分析网页请求和响应来模拟用户行为,如查询车次、获取余...
这个文件对于开发者来说是宝贵的资源,尤其是那些需要与12306接口对接的第三方应用开发者。通过这个文件,他们可以轻松地将用户输入的地理位置转换为12306系统能识别的城市代码,从而实现数据交互。 城市代码的使用...
你可以通过分析和修改源代码,了解如何实现类似12306的功能,如用户登录、车次查询、票务预订、支付接口集成等,并且可以在此基础上扩展自己的功能或优化性能。 【标签】"C#" 和 "12306" 标签明确指出了项目的编程...
通过C#与12306接口进行交互,我们可以构建一个程序来自动获取票价数据,方便用户进行查询。 首先,我们需要了解12306的API接口。虽然12306官方并未公开提供正式的开发者API,但有一些开发者通过分析网页结构和请求...
通过对12306订票助手源码的学习,开发者可以了解网络爬虫、自动化测试、数据分析等相关技术,并能掌握如何与复杂Web应用进行交互。同时,这也是一个很好的实践案例,展示了如何通过编程解决实际生活中的问题。然而,...
2. **数据接口调用**:开发者可以通过12306提供的API接口,使用车站代码查询车次、余票等信息,为第三方应用提供服务。 3. **程序开发**:在编程时,可以将车站代码作为参数,方便快捷地进行数据处理和信息检索。 ...
这个压缩包可能包含用于构建或分析12306网站的源代码、配置文件或其他相关素材。 描述 "srca12306" 似乎是对压缩包内容的简短概括,没有提供太多具体信息,但我们可以推测它与12306系统背后的软件开发工作有关。 ...
在这个项目中,我们主要使用`requests.get()`方法来发起GET请求,获取12306接口的数据。在调用这个方法时,我们需要指定URL,即12306的查询接口地址,通常包含出发地、目的地、日期等参数。 接着,12306的接口通常...
TOBA.Interface.dll和TOBA.Interface.pdb则是接口库和对应的调试符号文件,可能代表了一个名为TOBA的系统或框架,12306订票助手通过这个接口与之交互,实现更高级别的功能,如登录验证、票务查询等。pdb文件则在开发...
7. **用户体验优化**:为了提高用户体验,抢票助手可能还包括实时更新的余票信息展示、购票成功提示、购票失败原因分析等功能,这些都需要利用到UI设计和数据可视化技术。 总之,12306抢票助手C#源码展示了如何利用...
12306是中国铁路官方的在线售票平台,其接口和规则可能需要开发者通过网络爬虫或API接口进行研究和适应。 压缩包内的文件名“12306自动订票系统.rar”可能包含了整个自动订票程序的可执行文件或者源代码,用户可以...
【12306存储架构分析】 12306是中国铁路客户服务中心的在线订票平台,其存储架构设计是确保高效、安全和稳定服务的关键。该架构主要由以下几个部分组成: 1. **应用层**:包括车站售票系统、代售点系统以及12306...
- 分析服务器返回的状态码和消息,判断登录是否成功。成功则保存Session ID,以便后续的API调用;失败则提示错误信息。 6. **本地存储**: - 如果用户勾选了“记住密码”,需要将用户名和加密后的密码安全地存储...
【Python-基于flask框架的12306抢票程序】 在当今互联网时代,12306是中国铁路官方的网上购票平台,每逢节假日,尤其是春运期间,火车票一票难求。为了提高购票效率,许多技术爱好者利用编程技能开发了抢票软件。本...
然后,12306的接口分析也是技术点之一。虽然12306官方并不提供公开的API,但开发者可以通过逆向工程解析其HTTP请求,模拟出购票流程。这需要对HTTP协议、JSON数据格式以及网页动态加载技术有一定的理解。 在压缩...
此类系统通常涵盖多个关键模块,包括用户管理、车次管理、座位管理、订单处理、支付接口以及后台数据分析。下面将详细介绍这些核心模块及其技术实现。 一、用户管理 用户管理模块负责处理用户的注册、登录、密码...
通过以上分析,我们可以看到12306用户管理系统是一个综合性的项目,涵盖了软件工程的多个方面,对于提升Java开发者在企业级应用开发中的技能具有重要价值。通过实际的实训项目,开发者可以更深入地理解和掌握这些...
源码的分析与理解对于开发者来说,是学习网络爬虫、自动化脚本、多线程处理以及与API接口交互等技术的宝贵资源。 首先,我们需要了解TicketHelper的核心功能。这个工具可能包含了模拟用户登录12306网站、自动填充...
尽管“12306余票查询”接口已不可用,但我们仍可从中学到很多关于大型系统设计、接口开发、安全防护以及数据分析的知识。这些技术不仅适用于铁路票务系统,也可广泛应用于其他领域,如电子商务、航空票务等,为我们...