Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 11838|Відповідь: 1

Інтерфейси та формати даних для захоплення квитків 12306

[Копіювати посилання]
Опубліковано 27.09.2017 10:15:39 | | |

Давайте одразу до суті, тут я головним чином хочу поговорити про інтерфейси та формати даних поточних функцій 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: ДОРОСЛИЙ
                    Повернення: повертається до формату 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: Пункт призначення
                                      Невизначено: порожній рядок
                           Повернення: Повертає формат JSON, щоб визначити, чи успішна подача
                    По-друге: Отримати відповідні параметри
                            Метод: POST
                            Інтерфейс: https://kyfw.12306.cn/otn/confirmPassenger/initDc
                             Параметри:
                              _json_att: Порожня нитка
                             Return: 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
                                       пасажирTicketStr: тип місця, 0, тип квитка, ім'я, ідентифікація, телефон, N (якщо їх кілька, розділених комою)
                                       oldPassengerStr: ім'я, тип посвідчення, ідентифікаційний номер, тип користувача
                                       randCode: Код запланованої верифікації
                                       tour_flag:DC
                                       _json_att: Порожня нитка
                                       REPEAT_SUBMIT_TOKEN: Отримайте це з попереднього кроку
                              Return: формат json для визначення, чи можна його зафіксувати.
                    П'яте: Підтвердити здачу
                                Метод: POST
                                Інтерфейс: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue
                                Параметри:
   
                                       пасажирTicketStr: тип місця, 0, тип квитка, ім'я, ідентифікація, телефон, N (якщо їх кілька, розділених комою)
                                       oldPassengerStr: ім'я, тип посвідчення, ідентифікаційний номер, тип користувача
                                       randCode: Код запланованої верифікації
                                       purpose_codes: Крок 3, щоб отримати
                                       key_check_isChange: Там само.
                                       leftTicketStr; Там же
                                       train_locatio{filter}n; Там же
                                       REPEAT_SUBMIT_TOKEN: Там само.
                                       _json_att: Порожня нитка   
                               Return: форматувати json, визначити, чи успішно подання, повернути час очікування і викликати крок 6 кожен певний період для повернення результату обробки
                     Шосте: опитування для отримання результатів подачі
                               Метод: GET
                               Інтерфейс: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?
                               Параметри:
   
                                       випадкові: випадкові числа
                                       турПрапор: dc   
                                       REPEAT_SUBMIT_TOKEN: Потрібно отримати третю частину
                                       _json_att: Порожня нитка   
                               Return: формат json, поверніть час очікування, якщо waitTime менше 0 — отримати інформацію про замовлення orderId, якщо більше 0 — продовжити опитування
          5. Запитайте про незавершені замовлення
                 Метод: POST
                 Інтерфейс: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete
                 Параметри:
                _json_att: Порожня нитка   
                Повернення: у форматі JSON, містить інформацію про замовлення та аналізує безпосередньо

           До речі, п'ять функцій фактично введені, але тепер вони опубліковані лише для того, щоб навчитися користуватися, і не будуть піддаватися зловмисним атакам, крім того, інтерфейс сайту 12306 дуже часто змінюється, і інтерфейс, який зараз опубліковано, може бути змінений завтра, тому важливо навчитися отримувати релевантні інтерфейси та дані, аналізувати їх для отримання відповідних параметрів і результатів. Тут я переважно використовую firebug — інструмент аналізу мережі, що йде в комплекті з браузером Chrom, а також інструменти Fiddler і Wireshark, а також інструкції щодо використання пов'язаних інструментів — просто шукайте їх в Інтернеті.
            Нарешті, давайте поскаржимося, сайт 12306 використовує технологію статичного кешування CDN, що призведе до вибору відповідних серверів відповідно до балансування навантаження в різних регіонах, пропускної здатності та навантаження, тобто по всій країні багато серверів 12306. Кожен користувач може отримати доступ до можливих серверів, але лише статичних сторінок, js, css і зображень тощо, але кожен сервер безпосередньо зберігатиме спільну сесію, тобто якщо ви увійдете на один із серверів на інших серверах. Вищезазначене також еквівалентне приземленням. Тому найкраще мати можливість обирати сервер динамічно, щоб час кешу був актуальним, мінімальним навантаженням, а дані більш актуальними. У моїй реалізації, якщо не зробити запит один раз, IP-адреса сервера змінюється один раз. Щодо відповідної технології, я розкрию її пізніше. Але зміст цієї статті достатній для навчання. Ви можете побачити конкретну IP-адресу у http://tool.chinaz.com/dns.




Попередній:{:1_3:} {:1_3:} Щасливого дня
Наступний:Як js копіює об'єкт?
Опубліковано 28.09.2017 09:19:34 |
Чи буде бос брати квитки?
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com