您的位置:首页 > 理论基础 > 计算机网络

基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式

2014-12-14 14:35 543 查看
一、基于HTTPS协议的12306抢票软件设计与实现--实现效果

二、基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式

三、基于HTTPS协议的12306抢票软件设计与实现--垂直查询效果分享

实现效果:/article/1330489.html

直接步入正题吧,在这主要想说下现在的12306各个功能的接口以及数据格式。主要分为登录,获取联系人,查票,预定,查询未完成订单五个模块,至于其他的一些接口不重要,可以直接忽略,比如检测验证码是否正确,请求车票剩余个数等等,本文并为写出来,有需求的可以自行研究。

一、登录

登录主要是获取session,保持与服务器端通信。登录主要有两个步骤

第一 获取登录验证码

方法:GET

接口:https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand&

参数:照抄,一样的

返回:二进制图片流

第二 登录

方法:POST

接口:https://kyfw.12306.cn/otn/login/loginAysnSuggest

参数:1、loginUserDTO.user_name 用户名

2、randCode 验证码

3、userDTO.password 密码

返回:json字符串,可判断是否登录成功

二、获取联系人

方法:GET

接口:https://kyfw.12306.cn/otn/passengers/init

参数:无

返回:html文件,里面能够找到一个变量,是json格式的,能够解析成user对象

三、查票

方法:GET

接口:https://kyfw.12306.cn/otn/leftTicket/query?

参数:leftTicketDTO.train_date:查票日期

leftTicketDTO.from_station:起始站(字母代号)

leftTicketDTO.to_station:目的站(字母代号)

purpose_codes:ADULT

返回:返回json格式,直接解析

四、预定

预定分6个步骤,一一进行,相互关联

第一:预提交

方法:POST

接口:https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest

参数:secretStr:从查票中获得(每个车次对应一个,并且每次都不一样,需要实时解析)

train_date:订票日期

back_train_date:返程日期

tour_flag: dc

purpose_codes:ADULT

query_from_station_name:出发站

query_to_station_name:目的站

undefined:空字符串

返回:返回json格式,判断是否提交成功

第二:获取相应参数

方法:POST

接口:https://kyfw.12306.cn/otn/confirmPassenger/initDc

参数:

_json_att:空字符串

返回:html文件,在前几行解析globalRepeatSubmitToken 下面有用,以及从下面获取ticketInfoForPassengerForm变量的值,是个json格式,从中获取purpose_codes,key_check_isChange,leftTicketStr,train_location为下面提交做准备

第三:获取提交验证码

方法:GET

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

参数:



返回:和登录验证码一样,返回图片二进制流

第四:检测是否可以确认提交

方法:POST

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

参数:

cancel_flag:2

bed_level_order_num:000000000000000000000000000000

passengerTicketStr:座位类型,0,车票类型,姓名,身份正号,电话,N(多个的话,以逗号分隔)

oldPassengerStr:姓名,证件类别,证件号码,用户类型

randCode:预定验证码

tour_flag:dc

_json_att:空字符串

REPEAT_SUBMIT_TOKEN:从上一步获取

返回:json格式,判断是否可以提交

第五:确认提交

方法:POST

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

参数:

passengerTicketStr:座位类型,0,车票类型,姓名,身份正号,电话,N(多个的话,以逗号分隔)

oldPassengerStr:姓名,证件类别,证件号码,用户类型

randCode:预定验证码

purpose_codes:第3步获取

key_check_isChange:同上

leftTicketStr;同上

train_location;同上

REPEAT_SUBMIT_TOKEN:同上

_json_att:空字符串

返回:json格式,判断是否提交成功,并返回等待时间,每隔一定时间段调用第六步返回处理结果

第六:轮询获取提交结果

方法:GET

接口:https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?

参数:

random:随机数字

tourFlag:dc

REPEAT_SUBMIT_TOKEN:有第三部获取

_json_att:空字符串

返回:json格式,返回等待时间,如果waitTime小于0,则获取订单信息orderId,如果大于0,则继续轮询

五、查询未完成订单

方法:POST

接口:https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete

参数:

_json_att:空字符串

返回:json格式,包含订单信息,直接解析

说到这,5个功能基本就介绍了,但现在贴出来只是为了学习使用,不会恶意攻击,况且,12306网站接口更改很频繁,现在贴出来的接口说不定明天就 被改了,所以重要的其实还是学会怎么抓取相关接口和数据,以及从数据中进行分析获取相应的参数,相应的结果。在这里我主要用了firebug,chrom浏览器自带 的网络分析工具,以及fiddler和wireshark工具,相关工具使用说明,就自己在网上找吧。

最后在吐槽一下吧,12306网站用到了cdn静态缓存技术,会导致在不同的区域,带宽,负载下根据负载均衡选择相应的服务器,也就是说全国各地有很多的12306服务器 每个用户访问的可能服务器是不样的,但只是静态页面和js、css和图片等,但各个服务器直接会保持session共享的,也就是在其中一台服务器登陆的话,在别的服务器 上面也相当于已经登陆了。所以最好能够动态选择服务器,使缓存时间最新,压力最小,数据更实时很重要。在我的实现中就是没查询一次,就会换一次服务器ip。至于相关 技术我以后会揭晓。但本文的内容对于学习来说已经够了。查询具体ip在http://tool.chinaz.com/dns
里面能够看到。
以上接口和格式写的有点模糊,有不到之处还请见谅。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐