Allons droit au but, ici je veux surtout parler des interfaces et des formats de données des fonctions actuelles du 12306. Il est principalement divisé en cinq modules : connexion, obtention de contacts, vérification des tickets, réservation et requête des commandes inachevées, car pour certaines autres interfaces peu importantes, vous pouvez les ignorer directement, comme détecter la correction du code de vérification, demander le nombre restant de tickets, etc. cet article est rédigé, et vous pouvez l’étudier vous-même si besoin. 1. Connexion La connexion sert principalement à obtenir la session et à maintenir la communication avec le serveur. Il y a deux étapes principales pour se connecter D’abord, obtenez le code de vérification de connexion Méthode : GET Interface : https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Paramètres : reçu, pareil Arrière : flux d’images binaires Deuxième connexion Méthode : POST Interface : https://kyfw.12306.cn/otn/login/loginAysnSuggest Paramètres : 1. loginUserDTO.user_name Nom d’utilisateur 2. code de vérification randCode 3. userDTO.password mot de passe Retour : chaîne json, qui peut déterminer si la connexion est réussie 2. Obtenir des contacts Méthode : GET Interface : https://kyfw.12306.cn/otn/passengers/init Paramètres : Aucun Retour : fichier html, vous pouvez y trouver une variable, qui est au format json et peut être analysée en un objet utilisateur 3. Contrôle des billets Méthode : GET Interface : https://kyfw.12306.cn/otn/leftTicket/query ? Paramètres : leftTicketDTO.train_date : Date de vérification des tickets leftTicketDTO.from_station : Station de départ (code alphabétique) leftTicketDTO.to_station : Gare de destination (code alphabétique) purpose_codes : ADULTE Retour : Retour au format JSON et analyse directe 4. Réservation La nomination est divisée en 6 étapes, une par une, interconnectées Premièrement : Avant soumission Méthode : POST Interface : https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Paramètre : secretStr : obtenu par vérification des billets (un pour chaque train, et différent à chaque fois, doit être analysé en temps réel) train_date : Date de réservation back_train_date : Date de retour tour_flag : DC purpose_codes : ADULTE query_from_station_name : Station de départ query_to_station_name : Gare de destination indéfini : une chaîne vide Retour : Retourne le format JSON pour déterminer si la soumission est réussie Deuxièmement : Obtenir les paramètres correspondants Méthode : POST Interface : https://kyfw.12306.cn/otn/confirmPassenger/initDc Paramètres : _json_att : Corde vide Return : fichier html, utile sous l’analyse de globalRepeatSubmitToken dans les premières lignes, et obtenant la valeur de la variable ticketInfoForPassengerForm en dessous, est au format json, à partir duquel purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n pour préparer les commits suivants Troisièmement : Obtenez le code de vérification de soumission Méthode : GET Interface : https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Paramètres : Aucun Retour : Retourne le flux binaire d’image, tout comme le code de vérification de connexion Quatrièmement : Vérifiez si la soumission peut être confirmée Méthode : POST Interface : https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Paramètres : cancel_flag :2 bed_level_order_num :00000000000000000000000000000000000 passengerTicketStr : Type de siège, 0, type de billet, nom, identité, téléphone, N (s’il y en a plusieurs, séparés par une virgule) oldPassengerStr : Nom, Type d’ID, Numéro d’ID, Type d’utilisateur randCode : Code de vérification programmé tour_flag :dc _json_att : Corde vide REPEAT_SUBMIT_TOKEN : Récupérez à partir de l’étape précédente Retour : format json pour déterminer s’il peut être engagé Cinquièmement : Confirmer la soumission Méthode : POST Interface : https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Paramètres :
passengerTicketStr : Type de siège, 0, type de billet, nom, identité, téléphone, N (s’il y en a plusieurs, séparés par une virgule) oldPassengerStr : Nom, Type d’ID, Numéro d’ID, Type d’utilisateur randCode : Code de vérification programmé purpose_codes : Étape 3 pour l’obtenir key_check_isChange : Ibid leftTicketStr ; Ibid train_locatio{filter}n ; Ibid REPEAT_SUBMIT_TOKEN : Ibid _json_att : Corde vide Retour : format json, déterminer si la soumission est réussie, renvoyer le temps d’attente, et appeler l’étape 6 tous les certains délais pour retourner le résultat de traitement Sixième : Un sondage pour obtenir les résultats des soumissions Méthode : GET Interface : https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime ? Paramètres :
aléatoire : nombres aléatoires Drapeau de la tournée : dc REPEAT_SUBMIT_TOKEN : Il y a une troisième étape à obtenir _json_att : Corde vide Retour : format json, retourne le temps d’attente, si le temps d’attente est inférieur à 0, obtiens l’information de commande orderId, si elle est supérieure à 0, continue le sondage 5. S’informer sur les ordres inachevés Méthode : POST Interface : https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Paramètres : _json_att : Corde vide Retours : format JSON, contient les informations de commande et analyse directement
À ce propos, les 5 fonctions sont essentiellement introduites, mais maintenant elles sont publiées uniquement pour apprendre à les utiliser, et ne seront pas attaquées malicieusement, de plus, l’interface du site 12306 change très fréquemment, et l’interface publiée maintenant pourrait être modifiée demain, donc l’important est d’apprendre à récupérer les interfaces et données pertinentes, et d’analyser à partir des données pour obtenir les paramètres et résultats correspondants. Ici, j’utilise principalement Firebug, l’outil d’analyse réseau fourni avec le navigateur Chrome, ainsi que les outils Fiddler et Wireshark, et les instructions pour utiliser les outils associés, il suffit de les chercher sur Internet. Enfin, plaignons-nous, le site 12306 utilise la technologie de cache statique CDN, ce qui permet de sélectionner les serveurs correspondants selon l’équilibrage de charge selon les régions, la bande passante et la charge, c’est-à-dire qu’il existe de nombreux serveurs 12306 à travers le pays. Chaque utilisateur peut accéder aux serveurs possibles est différent, mais seulement les pages statiques, js, css et images, etc., mais chaque serveur gardera directement la session partagée, c’est-à-dire si vous vous connectez à l’un des serveurs, sur d’autres serveurs Ce qui précède équivaut aussi à avoir atterri. Il est donc préférable de pouvoir choisir un serveur dynamiquement afin que les temps de cache soient à jour, que le stress soit minimal et que les données soient plus en temps réel. Dans mon implémentation, si vous ne faites pas de requête une seule fois, vous changerez l’adresse IP du serveur une seule fois. Quant à la technologie pertinente, je la révélerai plus tard. Mais le contenu de cet article suffit pour apprendre. Vous pouvez voir l’adresse IP spécifique dans le http://tool.chinaz.com/dns. |