今天我将把查询和订票的整个过程详细的介绍给大家。
一、查询余票信息
首先,我们抓下查询余票的http请求(以下图的查询为例子)
完整的http请求如下:
https://dynamic.12306.cn/otsweb/order/querySingleAction.do?method=queryLeftTicket&orderRequest.train_date=2013-10-11&orderRequest.from_station_telecode=BJP&orderRequest.to_station_telecode=WHN&orderRequest.train_no=&trainPassType=QB&trainClass=QB%23D%23Z%23T%23K%23QT%23&includeStudent=00&seatTypeAndNum=&orderRequest.start_time_str=00%3A00--24%3A00
请求的参数:
method:queryLeftTicket
orderRequest.train_date:2013-10-11
orderRequest.from_station_telecode:BJP
orderRequest.to_station_telecode:WHN
orderRequest.train_no:
trainPassType:QB
trainClass:QB#D#Z#T#K#QT#
includeStudent:00
seatTypeAndNum:
orderRequest.start_time_str:00:00--24:00
我们看到method这个参数,从字面的意思看出来了,是查询余票的。接着orderRequest.train_date表示乘车日期,orderRequest.from_station_telecode表示出发地的简码,orderRequest.to_station_telecode表示目的地的简码,orderRequest.train_no车次编码,trainPassType表示车的路过的类型,分别是全部:QB,始发:SF,路过:LG,trainClass表示车的类型,分别是:全部:QB,D车:D,Z字头:Z,T字头:T,K字头:K,其他:QT,如果多选中间以#连接。includeStudent表示是否是包含学生票,包含为0X00,不包含为00,seatTypeAndNum席别和数量,在这一步暂时没什么用。orderRequest.start_time_str表示出发时间。
接着看这个请求响应的结果(结果太长了,就拿一条记录来分析)
0,<span id='id_330000K5980K' class='base_txtdiv' onmouseover=javascript:onStopHover('330000K5980K#BXP#WCN') onmouseout='onStopOut()'>K599</span>, 北京西 <br> 05:20, 武昌 <br> 20:37,15:17,--,--,--,--,--,9,4,--,8,<font color='#008800'>有</font>,--,<a name='btn130_2' class='btn130_2' style='text-decoration:none;' onclick=javascript:getSelected('K599#15:17#05:20#330000K5980K#BXP#WCN#20:37#北京西#武昌#08#27#1*****30364*****00091*****00083*****0004#MUFFMDhDQTNCNEMzQjMwMTU4Qzg5NjdDODMxREI2MkNFODFDMThEREM3MzM0NDA5NEY0RTUzMTU6Ojo6MTM4MTMwMTIxMTg2MQ==#C1')>预 订</a>
响应的结果一段字符串,上面是截取的一条记录,观察发现响应的结果是返回车次信息,每条记录以\n结束。
而对于一条记录来说,是以“,”隔开的各个信息字段,对应于查询结果表格中的各个字段。
重点说下下面这个数据:
<a name='btn130_2' class='btn130_2' style='text-decoration:none;' onclick=javascript:getSelected('K599#15:17#05:20#330000K5980K#BXP#WCN#20:37#北京西#武昌#08#27#1*****30364*****00091*****00083*****0004#MUFFMDhDQTNCNEMzQjMwMTU4Qzg5NjdDODMxREI2MkNFODFDMThEREM3MzM0NDA5NEY0RTUzMTU6Ojo6MTM4MTMwMTIxMTg2MQ==#C1')>预 订</a>
这个是当用户点击预定的时候,要向服务器发送的数据,数据是以#隔开的,这个我把它称为orderkey。
OK,当我们点击预定的时候,看下发生了哪些http请求
post:https://dynamic.12306.cn/otsweb/order/querySingleAction.do?method=submutOrderRequest
post的数据:
station_train_code:K599
train_date:2013-10-11
seattype_num: from_station_telecode:BXP
to_station_telecode:WCN
include_student:00
from_station_telecode_name:北京
to_station_telecode_name:武汉
round_train_date:2013-10-09
round_start_time_str:00:00--24:00
single_round_type:1 train_pass_type:QB
train_class_arr:QB#D#Z#T#K#QT#
start_time_str:00:00--24:00
lishi:15:17
train_start_time:05:20
trainno4:330000K5980K
arrive_time:20:37
from_station_name:北京西
to_station_name:武昌
from_station_no:08
to_station_no:27
ypInfoDetail:1*****30364*****00091*****00083*****0004
mmStr:Qzg1NUEzMzUzQTUwQzgzQUVFRkM1MDM0MDk4QkNEMzM4QUU1OUQ0MjNEODMyNERDNENDMjY3QkY6Ojo6MTM4MTMwMTE0Mzk4OQ==
locationCode:C1
OTkwNjU2OA==:YWJjYjU2NDBiOTE0MWViZQ==
myversion:undefined
上面的参数我们大多数都可以通过点击预定时候的那个"orderkey"获取到,只是后面的多了一个红色标注的动态key和动态value,这个在上一面文章已经提到过怎么得到了,这里就不再多说。
返回的结果是一个302,302的地址是:
https://dynamic.12306.cn/otsweb/order/confirmPassengerAction.do?method=init
打开这个页面,发现是选择乘客信息的和提交订单的页面。
接着我们选择乘客人,输入验证码后提交,看发生了哪些请求:
post:https://dynamic.12306.cn/otsweb/order/confirmPassengerAction.do?method=checkOrderInfo&rand=x8t6
rand表示验证码,从method的字面意思看是检测订单信息
post数据:
如上图所示这个post的数据中,包含了乘车信息,和乘客信息。乘车信息,在上一步预定的时候都可以得到,乘客信息呢,观察得到,
https://dynamic.12306.cn/otsweb/order/confirmPassengerAction.do?method=getpassengerJson 这个地址可以得到用户的所有乘客人信息,通过选择的乘客信息,可以构造出我们要提交的数据。
post的数据当中org.apache.struts.taglib.html.TOKEN和leftTicketStr是怎么来的呢,回头看看预定后的那个302地址,发现源码里面有这么一段
<input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="21f84a6c22c03df66fcd90a5d1eb9818">
<input type="hidden" name="leftTicketStr" id="left_ticket" value="1015253036404275000910152500083027050004" />
对比上面post的数据的值,这个正是我们需要的,所以,从302地址的源码我们可以得到这些值了。
看看请求的结果:
{"checkHuimd":"Y","check608":"Y","msg":"","errMsg":"Y"}
其中checkHuimd为N的话说明:由于您取消次数过多,今日将不能继续受理您的订票请求!
check608为N的话说明:本车为实名制列车,实行一日一车一证一票制!
当上面那2个值有一个为N的话,msg将显示错误信息。
OK,如果这一步无错误信息提示,将继续查询余票信息
get:https://dynamic.12306.cn/otsweb/order/confirmPassengerAction.do?method=getQueueCount&train_date=2013-10-11&train_no=330000K5980K&station=K599&seat=3&from=BXP&to=WCN&ticket=1015253035404275000910152500003027050004
返回的结果是:
{"countT":0,"count":0,"ticket":"1*****30354*****00091*****00003*****0004","op_1":false,"op_2":false}
如果op_2为true的话表示目前排队人数已经超过余票张数,countT表示目前排队人数。
ticket表示余票信息。
如果有票的话,我们继续请求:
post:https://dynamic.12306.cn/otsweb/order/confirmPassengerAction.do?method=confirmSingleForQueue
post的数据和检测订单的数据大致一样,只是少了一个tFlag:dc。
响应的结果:{"errMsg":"Y"},这就表示订单确认成功了。如果errMsg为N的话,响应的结果会出现msg信息来表示错误信息。
订单确认成功了,我们还得取检测下订单是否完成
get:https://dynamic.12306.cn/otsweb/order/myOrderAction.do?method=queryOrderWaitTime&tourFlag=dc
响应的结果:{"tourFlag":"dc","waitTime":-1,"waitCount":0,"orderId":"E493113786","requestId":5793605912349971391,"count":0}
waitTime表示排队等待的时间,如果为-1表示订单成功了,可以去付款了。orderId表示订单编号,当订单成功后这个值才会出现。
至此,整个查询,下订单的过程完成了。
最后上一张我写的查询订票的图:
相关推荐
《12306自动火车订票系统:深入解析与应用》 12306自动火车订票系统,作为一款高效便捷的购票工具,深受广大旅客的喜爱。它旨在帮助用户自动化地完成火车票的查询、预定和购买过程,极大地减轻了在节假日等高峰期...
- 为了提高效率,12306订票助手可能采用多线程或异步编程技术,同时处理多个任务,比如同时查询多个车次的余票,提升抢票速度。 5. **验证码识别** - 针对12306的图形验证码,有些订票助手会集成OCR(光学字符...
首先,12306订票助手.NET的核心功能在于自动化的票务查询和预定。在传统的人工操作中,用户需要频繁刷新12306网站,寻找有余票的车次,这不仅耗时,还可能导致因网络延迟错过购票机会。而订票助手则能实时监控余票...
标题中的“12306 自动订票”是指利用编程技术开发的一款应用程序,旨在帮助用户自动化地在12306中国铁路客户服务中心网站上完成火车票的查询、预定和购买过程。这类程序通常会模拟用户的操作行为,节省用户手动操作...
360急速浏览器是一款基于Chromium内核的国产浏览器,它与Chrome有许多相似之处。确保浏览器版本更新至最新,同时启用“极速模式”。如果360急速浏览器的12306插件无法正常工作,可以尝试在浏览器设置中开启“兼容性...
12306订票助手 v1.4.6源码 源码描述: 本程序最早于去年春节时因一票难求系群内作者草人所写,今年因铁道部网站相关变化我重新拿出来修了修,完善了相关信息 声明:任何修改本程序及拿本程序做其它目的对他人造成...
与12306官网订票流程是一致的,用VC++开发的,在winXP上测试通过,目前版本最新支持到2016年7月,因为订票协议有可 能变更,所以不确定能支持到什么时候,后续有需求也会升级新版本。 本软件主要实现自动订票,...
该程序实现了一键登录,自动查询,自动选择最优车次及席别,自动识别验证码,自动订票等功能, 能够帮您在第一时间秒杀到回家的火车票,当然最后的付款操作还是非您莫属的。 程序提示订票成功后您只需在30分钟内...
《12306模拟订票系统-升级版》是一个专为模拟12306中国铁路官方购票流程而设计的软件系统。该系统旨在提供一个便捷、高效的平台,让用户能够在不访问12306官网的情况下进行火车票查询、预订和购买操作,尤其在高峰期...
12306.CN订票助手是由【木鱼】开发订票软件,并没有授权任何人以任何形式在任何渠道上进行销售(如淘宝等)目前助手只接受捐助(请参考捐助页面),如果您是从淘宝或任何第三方渠道购买的,请申请退款并向作者举报!...
12306手机客户端,12306订票助手,12306客户端实时的查询车次时刻信息,完备的购票功能,快捷又多样化的支付功能,满足您随时随地购票的需要。另外12306手机客户端,12306订票助手,12306客户端还可以实时监控火车票...
【12306自动订票系统】是一个旨在提高用户购票效率的软件工具,它能够自动执行购票操作,帮助用户在12306官方网站上快速抢购火车票。这样的系统通常采用自动化脚本技术,结合了数据分析和定时任务功能,以应对节假日...
在12306订票过程中,有几个关键知识点需要注意: 1. **账号注册与登录**:首先,用户需要在12306官网进行账号注册,提供有效的手机号或邮箱进行验证。注册后,通过用户名、密码以及可能的安全问题进行登录。 2. **...
《12306火车票订票系统项目详解》 12306火车票订票系统是中国铁路客户服务中心推出的在线购票平台,以其便捷高效的服务,成为广大旅客出行的重要工具。这个项目涉及到的技术和知识面广泛,涵盖了互联网应用开发、...
这个软件的目的是完全模拟人工在线订票,通过软件去实现12306的自动登录,有时间计划做成完全的12306人工在线订票模拟软件,解决人工在12306在线订票的种种痛苦。目前所有相关技术问题已经解决,唯一的问题是验证码...
12306铁路订票网的自动刷新脚本, 安装必须是谷歌浏览器(360极速也行),添加脚本后打开https://dynamic.12306.cn/otsweb/ 就可以登录后订票了 , 不是本人原创,但是本人亲测过 买成功了! 只是分享...
【最新火车票12306订票助手】是一款针对中国铁路客户服务中心12306官网的辅助软件,旨在帮助用户更方便、快捷地进行火车票查询、预订及管理。12306是中国铁路官方提供的在线购票平台,而这款订票助手则通过集成自动...
在中国,12306是中国铁路客户服务中心的官方网站,提供全国铁路旅客运输服务,包括查询车次、余票、购票、退票、改签等一系列功能。而这款12306订票助手,正是在官方网站的基础上,提供了一种更加便捷的购票方式。 ...
4. **多线程搜索**:不同于常规的单个页面查询,12306订票助手能同时查询多个车次,大大提高了查询效率。 5. **安全保护**:作为一款绿色版插件,它不会侵犯用户隐私,也不会在系统中留下任何垃圾文件,确保了用户...