Doğrudan konuya gelelim, burada esas olarak mevcut 12306 fonksiyonlarının arayüzleri ve veri formatlarından bahsetmek istiyorum. Oyun beş modüle ayrılmıştır: giriş yapma, iletişim kurma, bilet kontrolü, rezervasyon ve tamamlanmamış siparişleri sorgulama; önemli olmayan bazı diğer arayüzler ise doğrudan görmezden gelebilirsiniz, örneğin doğrulama kodunun doğru olup olmadığını tespit etmek, kalan bilet sayısını talep etmek vb., bu makale yazılmış ve ihtiyacınız olursa kendiniz de inceleyebilirsiniz. 1. Giriş Giriş yapmak esas olarak oturumu almak ve sunucuyla iletişimi sürdürmek içindir. Giriş yapmak için iki ana adım vardır Öncelikle, giriş doğrulama kodunu alın Yöntem: GET Arayüz: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Parametreler: kopyala, aynı Geri: İkili resim akışı İkinci Giriş Yöntem: POST Arayüz: https://kyfw.12306.cn/otn/login/loginAysnSuggest Parametreler: 1. loginUserDTO.user_name Kullanıcı adı 2. randCode doğrulama kodu 3. userDTO.password şifresi Returns: json dizisi, girişin başarılı olup olmadığını belirleyebilen 2. Bağlantı kur Yöntem: GET Arayüz: https://kyfw.12306.cn/otn/passengers/init Parametreler: Yok Return: html dosyası, içinde json formatında bir değişken bulabilirsiniz ve kullanıcı nesnesine ayrıştırılabilir 3. Bilet kontrolü Yöntem: GET Arayüz: https://kyfw.12306.cn/otn/leftTicket/query? Parametreler: leftTicketDTO.train_date: Bilet kontrolü tarihi leftTicketDTO.from_station: Başlangıç İstasyonu (Alfabetik Kod) leftTicketDTO.to_station: Varış istasyonu (alfabe kodu) purpose_codes:YETIŞKIN Dönüş: JSON formatına geri dönür ve doğrudan ayrıştırır 4. Rezervasyon Randevu 6 adıma ayrılır, birer teker, birbirleriyle bağlantılıdır İlk: Ön Başvuru Yöntem: POST Arayüz: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Parametre: secretStr: bilet kontrolünden elde edilir (her tren için bir tane ve her seferinde farklı, gerçek zamanlı olarak analiz edilmeli) train_date: Rezervasyon tarihi back_train_date: Dönüş tarihi tour_flag: DC purpose_codes:YETIŞKIN query_from_station_name: Kalkış istasyonu query_to_station_name: Varış istasyonu tanımlanmamış: boş bir dizi Dönüş: Gönderimin başarılı olup olmadığını belirlemek için JSON formatını döndürür İkincisi: Karşılık gelen parametreleri alın Yöntem: POST Arayüz: https://kyfw.12306.cn/otn/confirmPassenger/initDc Parametreler: _json_att: Boş dizi Return: html dosyası, globalRepeatSubmitToken ayrıştırırken ve aşağıdan ticketInfoForPassengerForm değişkeninin değerini almak için faydalı olan html dosyası, json formatındadır, buradan purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n Aşağıdaki taahhütlere hazırlanmak için Üçüncüsü: Gönderim doğrulama kodunu alın Yöntem: GET Arayüz: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Parametreler: Hiçbiri yok Return: Giriş doğrulama kodu gibi görüntü ikili akışını döndürür Dördüncüsü: Başvurunun onaylanıp onaylanamadığını kontrol edin Yöntem: POST Arayüz: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Parametreler: cancel_flag:2 bed_level_order_num:0000000000000000000000000000000 ýolagçyTicketStr: Koltuk tipi, 0, bilet türü, isim, kimlik, telefon, N (birden fazla varsa, virgülle ayrılmış) oldPassengerStr: İsim, ID Tipi, Kimlik Numarası, Kullanıcı Tipi randCode: Zamanlanmış doğrulama kodu tour_flag:dc _json_att: Boş dizi REPEAT_SUBMIT_TOKEN: Önceki adımdan öğrenin Return: json formatı, taahhüt edilip edilemeyeceğini belirlemek için Beşinci: Gönderimi onaylayın Yöntem: POST Arayüz: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Parametreler:
ýolagçyTicketStr: Koltuk tipi, 0, bilet türü, isim, kimlik, telefon, N (birden fazla varsa, virgülle ayrılmış) oldPassengerStr: İsim, ID Tipi, Kimlik Numarası, Kullanıcı Tipi randCode: Zamanlanmış doğrulama kodu purpose_codes: Onu almak için 3. adım key_check_isChange: Aynı şey leftTicketStr; Aynı şey train_locatio{filter}n; Aynı şey REPEAT_SUBMIT_TOKEN: Aynı şey _json_att: Boş dizi Return: json formatı, göndermenin başarılı olup olmadığını belirleyin, bekleme süresini döndürün ve işlem sonucunu döndürmek için her belirli dönemde 6. adımı çağırın Altıncı: Başvuru sonuçlarını almak için anket Yöntem: GET Arayüz: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Parametreler:
rastgele: Rastgele sayılar tourFlag:dc REPEAT_SUBMIT_TOKEN: Elde edilmesi gereken üçüncü bir parça var _json_att: Boş dizi Return: json formatı, bekleme süresini döndür, waitTime 0'dan küçükse, orderId emir bilgisini alın, 0'dan büyükse sorgulamaya devam edin 5. Bitmemiş siparişler hakkında bilgi alın Yöntem: POST Arayüz: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Parametreler: _json_att: Boş dizi Dönüşler: JSON formatı, sipariş bilgisi içerir ve doğrudan ayrıştırır
Bu arada, 5 fonksiyon temelde tanıtıldı, ancak şimdi sadece kullanmayı öğrenmek için yayınlanıyor ve kötü niyetli saldırılara uğramayacak; ayrıca 12306 web sitesinin arayüzü çok sık değişiyor ve şimdi yayınlanan arayüz yarın değiştirilebilir, bu yüzden önemli olan ilgili arayüzleri ve verileri nasıl tutacağınızı öğrenmek ve verilerden analiz ederek ilgili parametreleri ve sonuçları elde etmek. Burada esas olarak chrom tarayıcısıyla birlikte gelen ağ analiz aracı firebug'u, ayrıca fiddler ve wireshark araçlarını ve ilgili araçları kullanma talimatlarını kullanıyorum, sadece internette arayın. Son olarak, şikayet edelim, 12306 web sitesi CDN statik önbellek teknolojisi kullanıyor, bu da farklı bölgelerdeki yük dengelemesi, bant genişliği ve yük miktarına göre ilgili sunucuların seçilmesine yol açacak, yani ülke genelinde birçok 12306 sunucusu var. Her kullanıcı erişebilir olası sunucular farklıdır, ancak sadece statik sayfalar ve js, css ve resimler vb. her sunucu oturumu doğrudan paylaşır (yani, sunuculardan birine giriş yaparsanız, diğer sunucularda da oturumu paylaşır. Yukarıdakiler de iniş yapmaya eşdeğerdir. Bu yüzden önbellek zamanlarının güncel olması, stresin minimum olması ve verilerin daha gerçek zamanlı olması için dinamik bir sunucu seçebilmek en iyisidir. Benim uygulamamda, bir kez sorgulama yapmazsanız, sunucu IP'sini bir kez değiştirirsiniz. İlgili teknolojiye gelince, daha sonra açıklayacağım. Ancak bu makalenin içeriği öğrenmek için yeterli. Belirli IP adresini http://tool.chinaz.com/dns içinde görebilirsiniz. |