Lähme otse asja juurde, siin tahan peamiselt rääkida praeguste 12306 funktsioonide liidestest ja andmeformaatidest. See on peamiselt jagatud viieks mooduliks: sisselogimine ja kontaktide saamine, piletite kontrollimine, broneerimine ja lõpetamata tellimuste pärimine, ning mõnede teiste mitteoluliste liideste puhul saab neid otse ignoreerida, näiteks tuvastada, kas kinnituskood on õige, küsida ülejäänud piletite arv jne, see artikkel on kirja pandud ja vajadusel saad seda ise uurida. 1. Logi sisse Sisselogimine on peamiselt selleks, et saada sessioon ja hoida ühendust serveriga. Sisselogimiseks on kaks peamist sammu Esiteks, hangi sisselogimise kinnituskood Meetod: GET Liides: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Parameetrid: kopeeritud, sama Tagasi: binaarne pildivoog Teine sisselogimine Meetod: POST Liides: https://kyfw.12306.cn/otn/login/loginAysnSuggest Parameetrid: 1. loginUserDTO.user_name Kasutajanimi 2. randCode verifitseerimiskood 3. userDTO.password parool Tagastab: json-string, mis määrab, kas sisselogimine õnnestub 2. Hangi kontaktläätsed Meetod: GET Liides: https://kyfw.12306.cn/otn/passengers/init Parameetrid: Puuduvad Return: html-fail, kus leiad muutuja, mis on json-formaadis ja mida saab kasutajaobjektiks parsida 3. Piletite kontrollimine Meetod: GET Liides: https://kyfw.12306.cn/otn/leftTicket/query? Parameetrid: leftTicketDTO.train_date: Pileti kontrolli kuupäev leftTicketDTO.from_station: Stardijaam (tähestikuline kood) leftTicketDTO.to_station: Sihtjaam (tähestikukood) purpose_codes:TÄISKASVANUD Tagasitulek: Naaseb JSON-formaati ja analüüsib otse 4. Broneering Ametisse nimetamine on jagatud kuueks sammuks, ükshaaval, omavahel seotud Esiteks: Eelesitamine Meetod: POST Liides: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Parameeter: secretStr: saadud piletikontrollist (üks iga rongi kohta, iga kord erinev, tuleb reaalajas analüüsida) train_date: Broneerimise kuupäev back_train_date: Tagasituleku kuupäev tour_flag: DC purpose_codes:TÄISKASVANUD query_from_station_name: Väljumisjaam query_to_station_name: Sihtjaam Määratlemata: tühi string Tagasitulek: tagastab JSON-formaadi, et hinnata, kas esitamine on edukas Teiseks: Hangi vastavad parameetrid Meetod: POST Liides: https://kyfw.12306.cn/otn/confirmPassenger/initDc Parameetrid: _json_att: Tühi string Tagasta: html-fail, mis on kasulik globalRepeatSubmitToken esimestes ridades ja ticketInfoForPassengerForm muutuja väärtuse saamisel allpool, on json-formaadis, kust purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n et valmistuda järgmisteks kohustusteks Kolmandaks: Hangi esitamise kinnituskood Meetod: GET Liides: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Parameetrid: Puudub Return: Tagastab pildi binaarvoogu, täpselt nagu sisselogimise kinnituskood Neljandaks: Kontrollige, kas esitatud taotlus on kinnitatav Meetod: POST Liides: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Parameetrid: cancel_flag:2 bed_level_order_num:0000000000000000000000000000000 passengerTicketStr: istmetüüp, 0, piletitüüp, nimi, identiteet, telefon, N (kui neid on rohkem kui üks, eraldatud komaga) oldPassengerStr: nimi, ID tüüp, ID number, kasutajatüüp randCode: Ajastatud verifitseerimiskood tour_flag:dc _json_att: Tühi string REPEAT_SUBMIT_TOKEN: Võta see eelmisest sammust Return: json formaadis, et määrata, kas seda saab kinnitada Viiendaks: Kinnita esitamine Meetod: POST Liides: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Parameetrid:
passengerTicketStr: istmetüüp, 0, piletitüüp, nimi, identiteet, telefon, N (kui neid on rohkem kui üks, eraldatud komaga) oldPassengerStr: nimi, ID tüüp, ID number, kasutajatüüp randCode: Ajastatud verifitseerimiskood purpose_codes: 3. samm, et selle kätte saada key_check_isChange: Sama sama leftTicketStr; Sama train_locatio{filter}n; Sama REPEAT_SUBMIT_TOKEN: Sama _json_att: Tühi string Tagastus: json-formaat, määra, kas esitamine õnnestub, tagasta ooteaeg ja helista iga kindla perioodi järel 6. samm, et tagastada töötlemistulemus Kuues: Küsitlus esitamistulemuste saamiseks Meetod: GET Liides: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Parameetrid:
Juhuslikud: Juhuslikud arvud tourFlag:dc REPEAT_SUBMIT_TOKEN: Kolmas osa tuleb omandada _json_att: Tühi string Tagasta: json formaat, tagasta ooteaeg, kui waitTime on väiksem kui 0, saa tellimuse info orderId, kui see on suurem kui 0, jätka küsitlust 5. Uuri lõpetamata tellimuste kohta Meetod: POST Liides: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Parameetrid: _json_att: Tühi string Tagastus: JSON formaat, sisaldab tellimuse infot ja analüüsib otse
Muide, 5 funktsiooni on põhimõtteliselt sisse toodud, kuid nüüd on need üles pandud lihtsalt selleks, et õppida kasutama ega rünnata pahatahtlikult, lisaks muutub 12306 veebilehe liides väga tihti ning praegu avaldatud liides võib homme muutuda, seega on oluline õppida haarama asjakohaseid liideseid ja andmeid ning analüüsima andmeid, et saada vastavad parameetrid ja tulemused. Siin kasutan peamiselt firebugi, võrguanalüüsi tööriista, mis tuleb krom-brauseriga, samuti fiddleri ja wiresharki tööriistu ning juhiseid seotud tööriistade kasutamiseks, lihtsalt otsi internetist. Lõpetuseks, kurdame, 12306 veebileht kasutab CDN staatilist vahemällu salvestamise tehnoloogiat, mis võimaldab valida vastavad serverid vastavalt koormuse tasakaalustamisele erinevates piirkondades, ribalaiusele ja koormusele, st 12306 servereid on üle kogu riigi. Iga kasutaja võib kasutada erinevaid servereid, kuid ainult staatilised lehed ja js, css ja pildid jne, kuid iga server hoiab sessiooni otse jagatuna, st kui logid sisse ühte serverisse, teistes serverites Eelnev on samuti samaväärne maandumisega. Seega on kõige parem valida server dünaamiliselt nii, et vahemälu ajad oleksid ajakohased, stress minimaalne ja andmed reaalajas paremad. Minu rakenduses, kui sa ei päri korra, vahetad serveri IP-aadressi korra. Mis puudutab asjakohast tehnoloogiat, siis avaldan selle hiljem. Aga selle artikli sisu on piisav õppimiseks. Konkreetset IP-aadressi näed http://tool.chinaz.com/dns. |