Mennään suoraan asiaan, tässä haluan pääasiassa puhua nykyisten 12306-funktioiden rajapinnoista ja tietomuodoista. Se on pääosin jaettu viiteen moduuliin: kirjautuminen, yhteystietojen saaminen, lippujen tarkistaminen, varaus ja keskeneräisten tilausten kysely, ja joidenkin muiden ei-tärkeiden käyttöliittymien kohdalla voit suoraan jättää huomiotta, kuten varmennuskoodin oikeellisuuden tunnistaminen, jäljellä olevan tikettimäärän pyytäminen jne., tämä artikkeli on kirjoitettu ylös, ja voit opiskella sitä itse, jos tarvitset. 1. Kirjaudu sisään Kirjautuminen on pääasiassa istunnon saamiseksi ja yhteydenpidon ylläpitämiseksi palvelimen kanssa. Kirjautumiseen on kaksi päävaihetta Ensiksi hanki kirjautumisvahvistuskoodi Menetelmä: GET Käyttöliittymä: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Parametrit: kopioi, sama Takaisin: Binäärikuvavirta Toinen kirjautuminen Menetelmä: POST Käyttöliittymä: https://kyfw.12306.cn/otn/login/loginAysnSuggest Parametrit: 1. loginUserDTO.user_name Käyttäjänimi 2. randCode-vahvistuskoodi 3. userDTO.password-salasana Palautukset: json-merkkijono, joka voi määrittää, onnistuuko kirjautuminen 2. Hanki piilolinssit Menetelmä: GET Käyttöliittymä: https://kyfw.12306.cn/otn/passengers/init Parametrit: Ei mitään Return: html-tiedosto, josta löydät muuttujan, joka on json-muodossa ja voidaan jäsentää käyttäjäobjektiksi 3. Lippujen tarkistus Menetelmä: GET Käyttöliittymä: https://kyfw.12306.cn/otn/leftTicket/query? Parametrit: leftTicketDTO.train_date: Lippujen tarkistuspäivä leftTicketDTO.from_station: Lähtöasema (aakkoskoodi) leftTicketDTO.to_station: Kohdeasema (aakkoskoodi) purpose_codes:AIKUISET Return: Palaa JSON-muotoon ja jäsentää suoraan 4. Varaus Nimitys on jaettu kuuteen vaiheeseen, yksi kerrallaan, jotka liittyvät toisiinsa Ensimmäinen: Ennakkolähetys Menetelmä: POST Käyttöliittymä: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Parametri: secretStr: saadaan lippujen tarkistuksesta (yksi jokaiselle junalle, eri kerralla, täytyy jäsentää reaaliajassa) train_date: Varauspäivä back_train_date: Paluu tour_flag: DC purpose_codes:AIKUISET query_from_station_name: Lähtöasema query_to_station_name: Määränpääasema määrittelemätön: tyhjä merkkijono Palautus: Palauttaa JSON-muodon selvittääkseen, onko lähetys onnistunut Toiseksi: Hanki vastaavat parametrit Menetelmä: POST Käyttöliittymä: https://kyfw.12306.cn/otn/confirmPassenger/initDc Parametrit: _json_att: Tyhjä merkkijono Palautus: html-tiedosto, joka on hyödyllinen globalRepeatSubmitTokenin jäsentämisessä ensimmäisillä riveillä ja ticketInfoForPassengerForm-muuttujan arvon saamiseksi alhaalta, on json-muodossa, josta purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n valmistautuakseen seuraaviin sitoumuksiin Kolmanneksi: Hanki lähetyksen vahvistuskoodi Menetelmä: GET Käyttöliittymä: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Parametrit: Ei mitään Return: Palauttaa kuvan binäärivirran, aivan kuten kirjautumisvahvistuskoodi Neljänneksi: Tarkista, voidaanko hakemus vahvistaa Menetelmä: POST Käyttöliittymä: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Parametrit: cancel_flag:2 bed_level_order_num:0000000000000000000000000000000 passengerTicketStr: Istuintyyppi, 0, lipputyyppi, nimi, henkilöllisyys, puhelin, N (jos niitä on useampi, erotettuna pilkulla) oldPassengerStr: Nimi, ID-tyyppi, ID-numero, käyttäjätyyppi randCode: Aikataulutettu vahvistuskoodi tour_flag:dc _json_att: Tyhjä merkkijono REPEAT_SUBMIT_TOKEN: Ota se edellisestä vaiheesta Palautus: json-muoto selvittääksesi, voidaanko se sitoutua Viides: Vahvista lähetys Menetelmä: POST Käyttöliittymä: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Parametrit:
passengerTicketStr: Istuintyyppi, 0, lipputyyppi, nimi, henkilöllisyys, puhelin, N (jos niitä on useampi, erotettuna pilkulla) oldPassengerStr: Nimi, ID-tyyppi, ID-numero, käyttäjätyyppi randCode: Aikataulutettu vahvistuskoodi purpose_codes: Vaihe 3 saadaksesi sen key_check_isChange: Sama leftTicketStr; Sama paikka train_locatio{filter}n; Sama paikka REPEAT_SUBMIT_TOKEN: Sama _json_att: Tyhjä merkkijono Palautus: json-muoto, selvitä, onko lähetys onnistunut, palauta odotusaika ja kutsu vaihe 6 tietyn ajan välein palauttaaksesi käsittelytuloksen Kuudes: Äänestys lähetystulosten saamiseksi Menetelmä: GET Käyttöliittymä: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Parametrit:
satunnainen: Satunnaisluvut tourFlag:dc REPEAT_SUBMIT_TOKEN: Kolmas osa on saatava _json_att: Tyhjä merkkijono Palauta: json-muoto, palauta odotusaika, jos waitTime on alle 0, hanki tilaustieto orderId, jos se on suurempi kuin 0, jatka kyselyä 5. Kysy keskeneräisistä tilauksista Menetelmä: POST Käyttöliittymä: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Parametrit: _json_att: Tyhjä merkkijono Palautukset: JSON-muoto, sisältää tilaustiedot ja jäsentää suoraan
Puhuen siitä, 5 funktiota on käytännössä esitellään, mutta nyt ne julkaistaan vain oppiakseen käyttämään, eikä sitä hyökätä pahantahtoisesti, lisäksi 12306-sivuston käyttöliittymä muuttuu hyvin usein, ja nyt julkaistu käyttöliittymä saattaa muuttua huomenna, joten tärkeintä on oppia hakemaan relevantteja rajapintoja ja dataa sekä analysoida dataa saadakseen vastaavat parametrit ja tulokset. Tässä käytän pääasiassa firebugia, joka tulee chrom-selaimen mukana tulevaa verkkoanalyysityökalua, sekä fiddler- ja wireshark-työkaluja, ja ohjeita niihin liittyvien työkalujen käyttöön, etsi se vain netistä. Lopuksi, valitetaanpa, 12306-sivusto käyttää CDN-staattista välimuistiteknologiaa, mikä johtaa vastaavien palvelimien valintaan eri alueiden kuormantasauksen, kaistanleveyden ja kuormituksen mukaan. Eli 12306-palvelimia on paljon ympäri maata. Jokainen käyttäjä voi käyttää mahdollisia palvelimia, jotka ovat erilaisia, mutta vain staattisia sivuja ja js:ää, css:ää ja kuvia jne., mutta jokainen palvelin pitää istunnon suoraan jaettuna, eli jos kirjaudut yhteen palvelimeen, muilla palvelimilla Yllä mainittu vastaa myös laskeutumista. Siksi on parasta valita palvelin dynaamisesti, jotta välimuistiajat ovat ajan tasalla, stressi minimaalinen ja data reaaliaikaisempaa. Minun toteutuksessani, jos et kysy kerran, vaihdat palvelimen IP-osoitteen kerran. Mitä tulee olennaiseen teknologiaan, paljastan sen myöhemmin. Mutta tämän artikkelin sisältö riittää oppimiseen. Voit nähdä tarkan IP-osoitteen http://tool.chinaz.com/dns. |