Ας πάμε κατευθείαν στο θέμα, εδώ θέλω κυρίως να μιλήσω για τις διεπαφές και τις μορφές δεδομένων των τρεχουσών συναρτήσεων 12306. Χωρίζεται κυρίως σε πέντε ενότητες: σύνδεση, λήψη επαφών, έλεγχος εισιτηρίων, κράτηση και αναζήτηση ημιτελών παραγγελιών, καθώς για ορισμένες άλλες διεπαφές που δεν είναι σημαντικές, μπορείτε να τις αγνοήσετε απευθείας, όπως να εντοπίσετε εάν ο κωδικός επαλήθευσης είναι σωστός, να ζητήσετε τον υπόλοιπο αριθμό εισιτηρίων κ.λπ., αυτό το άρθρο είναι γραμμένο και μπορείτε να το μελετήσετε μόνοι σας εάν το χρειάζεστε. 1. Συνδεθείτε Η σύνδεση είναι κυρίως για τη λήψη της συνεδρίας και τη διατήρηση της επικοινωνίας με τον διακομιστή. Υπάρχουν δύο βασικά βήματα για να συνδεθείτε Πρώτα, λάβετε τον κωδικό επαλήθευσης σύνδεσης Μέθοδος: GET Διεπαφή: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Παράμετροι: αντιγραφή, ίδια Πίσω: Δυαδική ροή εικόνας Δεύτερη σύνδεση Μέθοδος: POST Διεπαφή: https://kyfw.12306.cn/otn/login/loginAysnSuggest Παράμετροι: 1. loginUserDTO.user_name Όνομα χρήστη 2. Κωδικός επαλήθευσης randCode 3. Κωδικός πρόσβασης userDTO.password Επιστρέφει: συμβολοσειρά json, η οποία μπορεί να καθορίσει εάν η σύνδεση είναι επιτυχής 2. Λάβετε επαφές Μέθοδος: GET Διεπαφή: https://kyfw.12306.cn/otn/passengers/init Παράμετροι: Καμία Return: html, μπορείτε να βρείτε μια μεταβλητή σε αυτό, η οποία είναι σε μορφή json και μπορεί να αναλυθεί σε ένα αντικείμενο χρήστη 3. Έλεγχος εισιτηρίων Μέθοδος: GET Διεπαφή: https://kyfw.12306.cn/otn/leftTicket/query; Παράμετροι: leftTicketDTO.train_date: Ημερομηνία ελέγχου εισιτηρίων leftTicketDTO.from_station: Αφετηρία (αλφαβητικός κωδικός) leftTicketDTO.to_station: Σταθμός προορισμού (αλφαβητικός κωδικός) purpose_codes:ΕΝΗΛΙΚΕΣ Return: Επιστρέφει σε μορφή JSON και αναλύει απευθείας 4. Κράτηση Το ραντεβού χωρίζεται σε 6 βήματα, ένα προς ένα, αλληλένδετα Πρώτον: Προ-υποβολή Μέθοδος: POST Διεπαφή: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Παράμετρος: secretStr: λαμβάνεται από τον έλεγχο εισιτηρίων (ένα για κάθε τρένο, και διαφορετικό κάθε φορά, πρέπει να αναλυθεί σε πραγματικό χρόνο) train_date: Ημερομηνία κράτησης back_train_date: Ημερομηνία επιστροφής tour_flag: DC purpose_codes:ΕΝΗΛΙΚΕΣ query_from_station_name: Σταθμός αναχώρησης query_to_station_name: Σταθμός προορισμού undefined: μια κενή συμβολοσειρά Return: Επιστρέφει τη μορφή JSON για να προσδιορίσει εάν η υποβολή είναι επιτυχής Δεύτερον: Λάβετε τις αντίστοιχες παραμέτρους Μέθοδος: POST Διεπαφή: https://kyfw.12306.cn/otn/confirmPassenger/initDc Παράμετροι: _json_att: Κενή συμβολοσειρά Επιστροφή: αρχείο html, χρήσιμο κατά την ανάλυση του globalRepeatSubmitToken στις πρώτες γραμμές και τη λήψη της τιμής της μεταβλητής ticketInfoForPassengerForm από κάτω, είναι σε μορφή json, από την οποία purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n για να προετοιμαστείτε για τις ακόλουθες υποβολές Τρίτον: Λάβετε τον κωδικό επαλήθευσης υποβολής Μέθοδος: GET Διεπαφή: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Παράμετροι: Κανένας Return: Επιστρέφει τη δυαδική ροή εικόνας, όπως ακριβώς και ο κωδικός επαλήθευσης σύνδεσης Τέταρτον: Ελέγξτε εάν η υποβολή μπορεί να επιβεβαιωθεί Μέθοδος: POST Διεπαφή: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Παράμετροι: cancel_flag:2 bed_level_order_num:00000000000000000000000000000 passengerTicketStr: Τύπος θέσης, 0, τύπος εισιτηρίου, όνομα, ταυτότητα, τηλέφωνο, N (εάν υπάρχουν περισσότερες από μία, χωρισμένες με κόμμα) oldPassengerStr: Όνομα, Τύπος ID, Αριθμός ID, Τύπος χρήστη randCode: Κωδικός προγραμματισμένης επαλήθευσης tour_flag:συνεχές ρεύμα _json_att: Κενή συμβολοσειρά REPEAT_SUBMIT_TOKEN: Αποκτήστε το από το προηγούμενο βήμα Return: μορφή json για να προσδιορίσετε εάν μπορεί να δεσμευτεί Πέμπτον: Επιβεβαίωση υποβολής Μέθοδος: POST Διεπαφή: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Παράμετροι:
passengerTicketStr: Τύπος θέσης, 0, τύπος εισιτηρίου, όνομα, ταυτότητα, τηλέφωνο, N (εάν υπάρχουν περισσότερες από μία, χωρισμένες με κόμμα) oldPassengerStr: Όνομα, Τύπος ID, Αριθμός ID, Τύπος χρήστη randCode: Κωδικός προγραμματισμένης επαλήθευσης purpose_codes: Βήμα 3 για να το αποκτήσετε key_check_isChange: Ό.π. αριστεράTicketStr; Ό.π. train_locatio{filter}n; Ό.π. REPEAT_SUBMIT_TOKEN: Ό.π. _json_att: Κενή συμβολοσειρά Επιστροφή: μορφή json, προσδιορίστε εάν η υποβολή είναι επιτυχής, επιστρέψτε τον χρόνο αναμονής και καλέστε το βήμα 6 κάθε συγκεκριμένη περίοδο για να επιστρέψετε το αποτέλεσμα επεξεργασίας Έκτο: Δημοσκόπηση για τη λήψη των αποτελεσμάτων υποβολής Μέθοδος: GET Διεπαφή: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime; Παράμετροι:
random: Τυχαίοι αριθμοί tourΣημαία:dc REPEAT_SUBMIT_TOKEN: Υπάρχει ένα τρίτο σκέλος που πρέπει να _json_att: Κενή συμβολοσειρά Επιστροφή: μορφή json, επιστρέψτε τον χρόνο αναμονής, εάν ο χρόνος αναμονής είναι μικρότερος από 0, λάβετε τις πληροφορίες παραγγελίας orderId, εάν είναι μεγαλύτερος από 0, συνεχίστε την ανίχνευση 5. Ρωτήστε για ημιτελείς παραγγελίες Μέθοδος: POST Διεπαφή: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Παράμετροι: _json_att: Κενή συμβολοσειρά Επιστρέφει: Μορφή JSON, περιέχει πληροφορίες παραγγελίας και αναλύει απευθείας
Εδώ που τα λέμε, οι 5 λειτουργίες εισάγονται βασικά, αλλά τώρα δημοσιεύεται μόνο για να μάθει να χρησιμοποιεί και δεν θα δεχθεί κακόβουλη επίθεση, επιπλέον, η διεπαφή του ιστότοπου 12306 αλλάζει πολύ συχνά και η διεπαφή που δημοσιεύτηκε τώρα μπορεί να αλλάξει αύριο, επομένως το σημαντικό είναι να μάθετε πώς να συλλέγετε σχετικές διεπαφές και δεδομένα και να αναλύετε από τα δεδομένα για να λάβετε τις αντίστοιχες παραμέτρους και τα αντίστοιχα αποτελέσματα. Εδώ χρησιμοποιώ κυρίως το firebug, το εργαλείο ανάλυσης δικτύου που συνοδεύει το πρόγραμμα περιήγησης chrom, καθώς και τα εργαλεία βιολιστή και wireshark και τις οδηγίες χρήσης σχετικών εργαλείων, απλώς αναζητήστε το στο Διαδίκτυο. Τέλος, ας παραπονεθούμε, ο ιστότοπος 12306 χρησιμοποιεί τεχνολογία στατικής προσωρινής αποθήκευσης CDN, η οποία θα οδηγήσει στην επιλογή αντίστοιχων διακομιστών ανάλογα με την εξισορρόπηση φορτίου σε διαφορετικές περιοχές, εύρος ζώνης και φορτίο, δηλαδή υπάρχουν πολλοί διακομιστές 12306 σε όλη τη χώρα Κάθε χρήστης μπορεί να έχει πρόσβαση στους πιθανούς διακομιστές είναι διαφορετικοί, αλλά μόνο στατικές σελίδες και js, css και εικόνες κ.λπ., αλλά κάθε διακομιστής θα διατηρήσει απευθείας την κοινή χρήση της συνεδρίας, δηλαδή εάν συνδεθείτε σε έναν από τους διακομιστές, σε άλλους διακομιστές Τα παραπάνω ισοδυναμούν επίσης με την προσγείωση. Επομένως, είναι καλύτερο να μπορείτε να επιλέξετε έναν διακομιστή δυναμικά, έτσι ώστε οι χρόνοι προσωρινής μνήμης να είναι ενημερωμένοι, το άγχος να είναι ελάχιστο και τα δεδομένα να είναι πιο σε πραγματικό χρόνο. Στην υλοποίησή μου, εάν δεν κάνετε ερώτημα μία φορά, θα αλλάξετε την IP του διακομιστή μία φορά. Όσο για τη σχετική τεχνολογία, θα την αποκαλύψω αργότερα. Αλλά το περιεχόμενο αυτού του άρθρου είναι αρκετό για μάθηση. Μπορείτε να δείτε τη συγκεκριμένη διεύθυνση IP στο http://tool.chinaz.com/dns. |