Térjünk rögtön a lényegre: itt főként a jelenlegi 12306 funkciók interfészeiről és adatformátumairól szeretnék beszélni. Főként öt modulra oszlik: bejelentkezés, kapcsolattartók megszerzése, jegyek ellenőrzése, foglalás és befejezetlen megrendelések lekérdezése, ahogy néhány más nem fontos felület esetében is közvetlenül figyelmen kívül hagyhatod őket, például a hitelesítő kód azonosítása, a fennmaradó jegyek kérése stb., ez a cikk ki van írva, és ha szükséged van rá, magad is tanulmányozhatod. 1. Bejelentkezés A bejelentkezés főként azért van, hogy megszerezze a játékmenetet és fenntartsa a kapcsolatot a szerverrel. Két fő lépés van a bejelentkezéshez Először szerezd meg a bejelentkezési ellenőrző kódot Módszer: GET Felület: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Paraméterek: másolás, ugyanaz Hátul: Bináris képfolyam Második bejelentkezés Módszer: POST Felület: https://kyfw.12306.cn/otn/login/loginAysnSuggest Paraméterek: 1. loginUserDTO.user_name Felhasználónév 2. randCode ellenőrző kód 3. userDTO.password jelszó Visszatérítése: json string, amely meghatározhatja, hogy a bejelentkezés sikeres lesz-e 2. Szerezz kontaktkontaktet Módszer: GET Interfész: https://kyfw.12306.cn/otn/passengers/init Paraméterek: Nincsenek Return: html fájl, találhatsz benne egy változót, ami json formátumban van, és felhasználói objektummá lehet értelmezni 3. Jegyellenőrzés Módszer: GET Felület: https://kyfw.12306.cn/otn/leftTicket/query? Paraméterek: leftTicketDTO.train_date: Jegyellenőrzés dátuma leftTicketDTO.from_station: Kezdőállomás (ábécé szerinti kód) leftTicketDTO.to_station: Célállomás (ábécé kód) purpose_codes:FELNŐTT Visszatér: Visszatér JSON formátumba és közvetlenül elemzés 4. Foglalás A kinevezés 6 lépésre oszlik, egyenként, egymáshoz kapcsolódó Első: Előzetes beküldés Módszer: POST Felület: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Paraméter: secretStr: jegyellenőrzésből származik (minden vonathoz egy, minden alkalommal más, valós időben kell értelmezni) train_date: Foglalási dátum back_train_date: Visszatérési dátum tour_flag: DC purpose_codes:FELNŐTT query_from_station_name: Indulási állomás query_to_station_name: Célállomás Definiálhatatlan: egy üres lánc Visszaküldés: Visszaadja a JSON formátumot, hogy megállapítsa, sikeres lesz-e a beküldés Másod: Szerezd meg a megfelelő paramétereket Módszer: POST Felület: https://kyfw.12306.cn/otn/confirmPassenger/initDc Paraméterek: _json_att: Üres húr Return: html fájl, amely hasznos a globalRepeatSubmitToken első néhány sorban történő elemzéséhez, és a ticketInfoForPassengerForm változó értékének alulról történő megszerzéséhez, json formátumban van, amelyből purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n a következő kötelezettségek előkészítése Harmadszor: Szerezd meg a beküldési ellenőrző kódot Módszer: GET Felület: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Paraméterek: Nincs Return: Visszaadja a kép bináris streamjét, pont úgy, mint a bejelentkezési ellenőrző kód Negyedszer: Ellenőrizzék, hogy a beküldés megerősíthető-e Módszer: POST Felület: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Paraméterek: cancel_flag:2 bed_level_order_num:0000000000000000000000000000000000000 utasTicketStr: Üléstípus, 0, jegytípus, név, személyazonosság, telefon, N (ha több van, vesszóval elválasztva) oldPassengerStr: név, azonosító típus, azonosító szám, felhasználói típus randCode: Ütemezett ellenőrzési kód tour_flag:dc _json_att: Üres húr REPEAT_SUBMIT_TOKEN: Tanuld meg az előző lépésből Return: json formátum, hogy megállapítsuk, el lehet-e kötelezni Ötödik: A benyújtás megerősítése Módszer: POST Felület: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Paraméterek:
utasTicketStr: Üléstípus, 0, jegytípus, név, személyazonosság, telefon, N (ha több van, vesszóval elválasztva) oldPassengerStr: név, azonosító típus, azonosító szám, felhasználói típus randCode: Ütemezett ellenőrzési kód purpose_codes: 3. lépés, hogy megszerezzük key_check_isChange: Ugyanígy leftTicketStr; Ugyanígy train_locatio{filter}n; Ugyanígy REPEAT_SUBMIT_TOKEN: Ugyanígy _json_att: Üres húr Visszaküldés: json formátum, határozd meg, hogy sikeres volt-e a beküldés, visszaadja a várakozási időt, és minden adott időszakban hívja a 6. lépést, hogy visszaadja a feldolgozási eredményt Hatodik: Szavazás a beküldési eredmények megszerzéséhez Módszer: GET Felület: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Paraméterek:
véletlenszerű: Véletlenszámok tourFlag:dc REPEAT_SUBMIT_TOKEN: Van egy harmadik rész is, amit meg kell szerezni _json_att: Üres húr Return: json formátum, a várakozási idő visszaadása, ha a waitTime kevesebb, mint 0, kapd meg a rendelési információt, OrderId, ha nagyobb, mint 0, folytasd a szavazást. 5. Érdeklődjön a befejezetlen rendelésekről Módszer: POST Interfész: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Paraméterek: _json_att: Üres húr Visszaküldés: JSON formátum, rendelési információkat tartalmaz, és közvetlenül elemz.
Ha már emellett tartunk, az 5 funkció gyakorlatilag be van vezetve, de most már csak azért teszik közzé, hogy megtanulják használni, és nem fogják rosszindulatúan támadni, ráadásul a 12306-os weboldal felülete nagyon gyakran változik, és a most közzétett felület holnap is változhat, ezért a lényeg, hogy megtanuld megszerezni a releváns felületeket és adatokat, és elemezni az adatokat, hogy megkapjuk a megfelelő paramétereket és eredményeket. Itt főleg a firebug-ot használom, ami a chrom böngészőhöz tartozó hálózati elemző eszközt, valamint a fiddler és wireshark eszközöket, valamint a kapcsolódó eszközök használati utasításait, csak keresd meg az interneten. Végül panaszkodjunk, a 12306-os weboldal CDN statikus gyorsítótározási technológiát használ, ami a megfelelő szerverek kiválasztásához vezet a különböző régiók terheléselosztása, sávszélesség és terhelés szerint, vagyis az országban sok 12306-os szerver van. Minden felhasználó hozzáférhet a lehetséges szerverekhez, amelyek különböznek, de csak statikus oldalak, js, css és képek stb., de minden szerver közvetlenül megosztja a munkamenetet, vagyis ha bejelentkezel az egyik szerverre, más szervereken A fentiek egyenértékű azzal, hogy leszálltál. Ezért a legjobb, ha dinamikusan választhatsz szervert, hogy a gyorsítótár ideje naprakész legyen, a stressz minimális, és az adatok valós idejűbbek legyenek. Az én implementációmban, ha egyszer sem kérdezel le, egyszer megváltoztatod a szerver IP-címét. A releváns technológiát később elárulom. De ennek a cikknek a tartalma elegendő a tanuláshoz. A konkrét IP-címet a http://tool.chinaz.com/dns-ben láthatod. |