天天看點

新版12306的刷票故事

     本屌絲家在異鄉,逢年過節免不了與12306你侬我侬一番。每次都有種力不從心的趕腳,之前因為時間關系,沒有深究12306如此神奇的原因,最近仔細研究了網上兩位高人關于新版12306搶票工具的代碼,在學習的同時,談談自己的感想先。話不多說,記錄如下:

    第一位的原貼位址是:http://www.cnblogs.com/leefan/p/3521629.html,這位仁兄的想法很是獨到,他将一些在前端的判定省略,進而很巧妙的借助已有jquery函數巧妙繞過了驗證碼的輸入,達到自動送出不用輸驗證碼的效果,并且修改一個參數,就可以将自動刷票的間隔時間随意更改。本屌是js的初學者,在對原作者無限崇拜的同時,發現由于作者是順着12306的思路,是以用了兩次ajax通信,第一次是驗證碼驗證,第二次是送出購票資訊,第一次還将ajax設定為同步,是以有些耗時。那麼既然是欺騙背景,為什麼不直接删掉第一次驗證碼的ajax通信呢,豈不是可以節省更多時間,帶來更多機會?于是本屌抱着試一試的态度,将第一次通信省略,發現可行。當我有點小激動的想去把第二次通信删除時,傳回如下頁面,(這不是傳說中的維護畫面嗎?),本屌後來想通了,因為你這個賬号是沒有在伺服器端有任何的訂購記錄,是以不會給你訂票的,有可能每晚23點以後就把這第二個ajax的調用給關閉,使我們沒有辦法繼續購票,如果這樣的話,那麼23點之前訂購成功的票,是可以在23點45分之前付款就行了(待驗證)。有點跑偏了,回到正題,是以本屌最後在原作者基礎上改過代碼如下,至于如何運作,本屌就不多說了,畢竟原作者非本人,但是如果要在firefox上運作,我遇到的問題是需要把$統統改為jQuery,否者FF會報不識别函數的錯誤。

autoSearchTime=600;
$("#randCode2").unbind('keyup');
function bO() {if ($("#sf2").is(":checked")) {return "0X00"} else {return "ADULT"}};
$("#randCode2").on("click",
     function(bS) {
        $("#back_edit").trigger("click");
        $.ajax({
          url: ctx + "confirmPassenger/confirmSingle",
          type: "post",
          data: {
           passengerTicketStr: getpassengerTicketsForAutoSubmit(),
           oldPassengerStr: getOldPassengersForAutoSubmit(),
           tour_flag: "dc",
           randCode: $("#randCode").val(),
           purpose_codes: bO(),
           key_check_isChange: md5Str,
           train_location: location_code
          },
          dataType: "json",
          async: true,
          success: function(bR) {
             otsRedirect("post", ctx + "payOrder/init?random=" + new Date().getTime(), {})
          },
          error: function(bR, bT, bS) {
           return
          }
         })
        $("#randCode2").removeClass("inptxt w100 error").addClass("inptxt w100");
        $("#i-ok2").css("display", "block");
        $("#c_error2").html("");
        $("#c_error2").removeClass("error");
        return
});
setInterval(function(){
 if($("#autosubmitcheckticketinfo").css("display")!="none"){
  $("#randCode2").trigger('click');
 }
},400);      
新版12306的刷票故事

     第二位大神的思路同樣很贊,原貼位址是:http://www.cnblogs.com/guozili/p/3512490.html,他實作了CDN的自動切換,事實和理論證明,這樣是管用的,我們不知道哪個CDN的緩存最先更新,或者簡單了解:餘票資訊在主伺服器上是一定的,那麼這些資訊更新到各地的CDN時間不一,有的幾秒鐘 ,有的幾分鐘,相信大家都有這樣的刷票經曆:和朋友第一時間一起開始刷票,可是人家那都買完了,自己還是沒有顯示一張票,不是網絡慢,不是電腦差,更不是你人品不行,而是你被路由到一個更新慢的CDN了(好像也是和人品有點關系)。原作者切換hosts ip的動作我是通過在VS上搭建一個ASP web 應用程式實作的,大家記得把port設定成1111就行了,或者改js裡的port尋址。我沒有改什麼東西,隻是覺得把host 更換頻率可以放快點(原來代碼是5秒),另外建議大家把兩位大神的方法一起用,那效果是剛剛的(既自動換CDN,又不用輸驗證碼)。

     其實想想12306也很不容易,哪個網站這樣糟蹋也消受不起,我能了解将一些判定放在前端是為了後端減壓,可是咱畢竟拿了那麼多錢在整網站,把錢用來加強一下後端處理能力,也不至于網絡黃牛漫天飛吧,最後希望每個人都能買到滿意的火車票,過個胡吃海喝的大年!

     此貼為學習貼,僅此而已。發帖的時機有些晚,還是希望能幫到大家。

繼續閱讀