12306---抢票分析

109 篇文章 0 订阅
70 篇文章 0 订阅
研究了12306官网每5秒自动查询是否有票的相关代码,是利用了 ajax技术对指定接口进行查询,如果返回值为有票,那就告知用户有票了并进入订票界面。官网用5秒一次的刷新速度,是保证了服务器在全国同时购票的几万人每5秒一次访问的情况下不崩溃而设定的较为理想的值,但很多抢票软件都是以更短的时间轮询以期在最快的时间内获取是否有票的信息。为保证尽可能地刷到票,我就把这个时间设定为0.5秒,并将超时时间设定为0.45秒,在查询到有票的时候播放汽笛声、弹窗提示并自动提交订票表单,这样基本满足抢票要求了。到了订票界面就需要自己手快一点、验证码输快一点了,没办法还不会做验证码识别——实战的时候,从有票到提交订票请求,再到输入验证码确认订票用了不到2秒的时间。利用自己学习到的技术完成了一项不靠别人靠自己的事情,想想还有点小激动呢,嘿嘿~

研究过程:

chrome浏览器自带的开发者工具(F12打开)查看查询时调用过程,定位查询代码,分析主要代码并解析出来,自己改造后直接在开发者工具的console里运行即可。

140119追踪查询调用路径、匿名函数.png

分析query发起过程


140119直接运行js代码.png

改造代码后直接在控制台运行

最终代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
flag = 0;
function X(){
     if ( flag==1 ) return ;
     // 请求参数
     var bR = {
         "leftTicketDTO.train_date" : "这里填乘车日期" ,
         "leftTicketDTO.from_station" : $( "#fromStation" ).val(),
         "leftTicketDTO.to_station" : $( "#toStation" ).val(),
         purpose_codes: "ADULT"
     };
     jQuery.ajax({
         type: "get" ,
         isTakeParam: false ,
         beforeSend: function (bT) {
             bT.setRequestHeader( "If-Modified-Since" , "0" );
             bT.setRequestHeader( "Cache-Control" , "no-cache" )
         },
         url: "https://kyfw.12306.cn/otn/leftTicket/query" ,
         data: bT,
         timeout: 450,
         success: function (bV) {
             if (bV.status) {
                 var d = bV.data[3];
                 if ( d.secretStr!= '' ){
                     // 播放声音
                     jQuery( '#tryPlayer' ).click();
                     flag = 1;
                     // 弹窗
                     alert( 'got it!' );
                     // 提交订单
                     submitOrderRequest(d.secretStr);
                 }
             }
         }
     });
}
   
setInterval( function (){X(bR);}, 500);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值