12306抢票软件相关接口以及数据格式

  

直接步入正题吧,在这主要想说下如今的12306各个功能的接口以及数据格式。主要分为登陆,获取联系人,查票,预约,查询未完成订单五个模块,至于其余的一些接口不重要,能够直接忽略,好比检测验证码是否正确,请求车票剩余个数等等,本文并为写出来,有需求的能够自行研究。
       1、登陆
             登陆主要是获取session,保持与服务器端通讯。登陆主要有两个步骤
             第一 获取登陆验证码
                     方法:GET
                     接口:https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand&
                     参数:照抄,同样的
                     返回:二进制图片流
             第二 登陆
                    方法:POST
                    接口:https://kyfw.12306.cn/otn/login/loginAysnSuggest
                    参数:一、loginUserDTO.user_name 用户名
                               二、randCode 验证码
                               三、userDTO.password 密码
                     返回:json字符串,可判断是否登陆成功
        2、获取联系人
                    方法:GET
                    接口:https://kyfw.12306.cn/otn/passengers/init
                    参数:无
                    返回:html文件,里面可以找到一个变量,是json格式的,可以解析成user对象
        3、查票
                    方法:GET
                    接口:https://kyfw.12306.cn/otn/leftTicket/query?
                    参数:leftTicketDTO.train_date:查票日期
                               leftTicketDTO.from_station:起始站(字母代号)
                               leftTicketDTO.to_station:目的站(字母代号)
                               purpose_codes:ADULT
                    返回:返回json格式,直接解析
         4、预约
                   预约分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_locatio{过滤}n为下面提交作准备
                    第三:获取提交验证码
                              方法: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_locatio{过滤}n;同上
                                       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,则继续轮询
          5、查询未完成订单
                 方法: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  里面可以看到。css

相关文章
相关标签/搜索