Mari kita langsung ke intinya, di sini saya terutama ingin berbicara tentang antarmuka dan format data dari fungsi 12306 saat ini. Ini terutama dibagi menjadi lima modul: login, mendapatkan kontak, memeriksa tiket, memesan, dan menanyakan pesanan yang belum selesai, sedangkan untuk beberapa antarmuka lain yang tidak penting, Anda dapat langsung mengabaikannya, seperti mendeteksi apakah kode verifikasi sudah benar, meminta jumlah tiket yang tersisa, dll., Artikel ini ditulis, dan Anda dapat mempelajarinya sendiri jika Anda membutuhkannya. 1. Masuk Login terutama untuk mendapatkan sesi dan menjaga komunikasi dengan server. Ada dua langkah utama untuk masuk Pertama, dapatkan kode verifikasi login Metode: DAPATKAN Antarmuka: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=login&rand=sjrand& Parameter: salin, sama Kembali: Aliran gambar biner Login Kedua Metode: POST Antarmuka: https://kyfw.12306.cn/otn/login/loginAysnSuggest Parameter: 1. loginUserDTO.user_name Nama pengguna 2. kode verifikasi randCode 3. kata sandi userDTO.password Mengembalikan: string json, yang dapat menentukan apakah login berhasil 2. Dapatkan kontak Metode: DAPATKAN Antarmuka: https://kyfw.12306.cn/otn/passengers/init Parameter: Tidak ada Kembali: html, Anda dapat menemukan variabel di dalamnya, yang dalam format json dan dapat diurai menjadi objek pengguna 3. Pemeriksaan tiket Metode: DAPATKAN Antarmuka: https://kyfw.12306.cn/otn/leftTicket/query? Parameter: leftTicketDTO.train_date: Tanggal pemeriksaan tiket leftTicketDTO.from_station: Stasiun Awal (Kode Abjad) leftTicketDTO.to_station: Stasiun tujuan (kode alfabet) purpose_codes:DEWASA Kembali: Kembali ke format JSON dan mengurai secara langsung 4. Reservasi Janji temu dibagi menjadi 6 langkah, satu per satu, saling terkait Pertama: Pra-pengiriman Metode: POST Antarmuka: https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest Parameter: secretStr: diperoleh dari pemeriksaan tiket (satu untuk setiap kereta, dan berbeda setiap kali, perlu diurai secara real time) train_date: Tanggal pemesanan back_train_date: Tanggal pengembalian tour_flag: dc purpose_codes:DEWASA query_from_station_name: Stasiun keberangkatan query_to_station_name: Stasiun tujuan undefined: string kosong Return: Mengembalikan format JSON untuk menentukan apakah pengiriman berhasil Kedua: Dapatkan parameter yang sesuai Metode: POST Antarmuka: https://kyfw.12306.cn/otn/confirmPassenger/initDc Parameter: _json_att: String kosong Kembalikan: file html, berguna di bawah penguraian globalRepeatSubmitToken di beberapa baris pertama, dan mendapatkan nilai variabel ticketInfoForPassengerForm dari bawah, dalam format json, dari mana purpose_codes, key_check_isChange, leftTicketStr, train_locatio{filter} n untuk mempersiapkan komitmen berikut Ketiga: Dapatkan kode verifikasi pengiriman Metode: DAPATKAN Antarmuka: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew.do?module=passenger&rand=randp& Parameter: Tidak ada Return: Mengembalikan aliran biner gambar, seperti kode verifikasi login Keempat: Periksa apakah pengajuan dapat dikonfirmasi Metode: POST Antarmuka: https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo Parameter: cancel_flag:2 bed_level_order_num:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 passengerTicketStr: Jenis kursi, 0, jenis tiket, nama, identitas, telepon, N (jika ada lebih dari satu, dipisahkan oleh koma) oldPassengerStr: Nama, Jenis ID, Nomor ID, Jenis Pengguna randCode: Kode verifikasi terjadwal tour_flag:dc _json_att: String kosong REPEAT_SUBMIT_TOKEN: Dapatkan dari langkah sebelumnya Kembalikan: format json untuk menentukan apakah itu dapat dilakukan Kelima: Konfirmasi pengiriman Metode: POST Antarmuka: https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue Parameter:
passengerTicketStr: Jenis kursi, 0, jenis tiket, nama, identitas, telepon, N (jika ada lebih dari satu, dipisahkan oleh koma) oldPassengerStr: Nama, Jenis ID, Nomor ID, Jenis Pengguna randCode: Kode verifikasi terjadwal purpose_codes: Langkah 3 untuk mendapatkannya key_check_isChange: Ibid kiriTiketStr; Ibid train_locatio{filter}n; Ibid REPEAT_SUBMIT_TOKEN: Ibid _json_att: String kosong Kembalikan: format json, tentukan apakah pengiriman berhasil, kembalikan waktu tunggu, dan panggil langkah 6 setiap periode tertentu untuk mengembalikan hasil pemrosesan Keenam: Jajak pendapat untuk mendapatkan hasil pengajuan Metode: DAPATKAN Antarmuka: https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime? Parameter:
acak: Angka acak bendera tur:dc REPEAT_SUBMIT_TOKEN: Ada bagian ketiga yang harus diperoleh _json_att: String kosong Return: format json, kembalikan waktu tunggu, jika waitTime kurang dari 0, dapatkan informasi pesanan orderId, jika lebih besar dari 0, lanjutkan polling 5. Tanyakan tentang pesanan yang belum selesai Metode: POST Antarmuka: https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete Parameter: _json_att: String kosong Mengembalikan: Format JSON, berisi informasi pesanan, dan mengurai secara langsung
Omong-omong, 5 fungsi pada dasarnya diperkenalkan, tetapi sekarang diposting hanya untuk belajar menggunakan, dan tidak akan diserang dengan jahat, apalagi antarmuka situs web 12306 sangat sering berubah, dan antarmuka yang diposting sekarang dapat diubah besok, jadi yang penting adalah mempelajari cara mengambil antarmuka dan data yang relevan, dan menganalisis dari data untuk mendapatkan parameter yang sesuai dan hasil yang sesuai. Di sini saya terutama menggunakan firebug, alat analisis jaringan yang disertakan dengan browser chrom, serta alat fiddler dan wireshark, dan petunjuk untuk menggunakan alat terkait, cari saja di Internet. Terakhir, mari kita keluh, situs web 12306 menggunakan teknologi caching statis CDN, yang akan mengarah pada pemilihan server yang sesuai sesuai dengan penyeimbangan beban di berbagai wilayah, bandwidth, dan beban, artinya, ada banyak server 12306 di seluruh negeri Setiap pengguna dapat mengakses server yang mungkin berbeda, tetapi hanya halaman statis dan js, css dan gambar, dll., tetapi setiap server akan langsung menjaga sesi tetap dibagikan, yaitu, jika Anda masuk ke salah satu server, di server lain Hal di atas juga setara dengan mendarat. Jadi yang terbaik adalah dapat memilih server secara dinamis sehingga waktu cache up to date, stres minimal, dan data lebih real-time. Dalam implementasi saya, jika Anda tidak melakukan kueri sekali, Anda akan mengubah IP server sekali. Adapun teknologi yang relevan, saya akan mengungkapkannya nanti. Namun isi artikel ini cukup untuk dipelajari. Anda dapat melihat alamat IP tertentu di http://tool.chinaz.com/dns. |