เมื่อเร็วๆ นี้ ฉันกำลังตั้งค่าบัญชีสาธารณะ WeChat ซึ่งเกี่ยวข้องกับการสอบถามตั๋วรถไฟ ฉันเคยใช้อินเทอร์เฟซที่พบทางออนไลน์มาก่อน แต่สามารถค้นหาได้เฉพาะตารางเวลารถไฟเท่านั้น และ 12306 ไม่มีอินเทอร์เฟซเฉพาะสำหรับการตรวจสอบตั๋ว วันนี้ฉันจำได้ทันทีว่าฉันไปที่ 12306 โดยตรงเพื่อสอบถามและคว้าแพ็กเก็ตข้อมูลที่ส่งคืนจากการสอบถามเพื่อที่ฉันจะได้รับข้อมูลตั๋วรถไฟ ที่นี่ฉันจะจดบันทึกเกี่ยวกับกระบวนการรับคะแนนเสียงที่เหลือ 12,306 เสียง
อันดับแรก ฉันใช้ 12306 บนเบราว์เซอร์ Firefox เพื่อตรวจสอบตั๋วที่เหลือ เปิดเว็บคอนโซลของ Firefox และเลือก "บันทึกคำขอและเนื้อหาการตอบกลับ" ในเครือข่าย
จากนั้นป้อนข้อมูลวันที่ของที่อยู่แล้วคลิกปุ่มสอบถามบนหน้าเว็บ และคุณจะเห็นที่อยู่ที่ร้องขอโดยหน้าเว็บในเว็บคอนโซล:
เป็นรายการที่สองในภาพ ซึ่งเป็นที่อยู่จริงที่จัดการเหตุการณ์เมื่อคุณคลิกปุ่มสอบถาม คลิกเพื่อดู
URL คำขอ ส่วนหัวคำขอ ส่วนหัวการตอบกลับ และเนื้อหาการตอบกลับประกอบด้วยข้อมูลตั๋วรถไฟที่เราต้องการ
ด้วย URL คำขอนี้ คุณสามารถไปยังโค้ดจริงเพื่อดำเนินการได้ จะพบว่ารูปแบบของ URL คือ
ด้านหน้าเป็นที่อยู่สำหรับดำเนินการตามคำขอ และพารามิเตอร์ต่อไปนี้ allowance_codes อ้างถึงตั๋วผู้ใหญ่ (AADULT) ตั๋วนักเรียน (ลองด้วยตัวเอง) queryDate คือวันที่ และ from_station และ to_station คือสถานีต้นทางและปลายทางตามชื่อที่แนะนำ . ที่นี่ปักกิ่งและหวู่ฮั่นแสดงเป็น BJP และ WHN ตามลำดับ
ในโค้ด Java คุณสามารถเขียนคำขอ https ได้โดยตรงเพื่อรับแพ็กเก็ตข้อมูลตั๋วรถไฟ
คัดลอกรหัสรหัสดังต่อไปนี้:
รายการคงที่สาธารณะ <NewTrain> getmsg (String startCity, String endCity, int isAdult) ส่งข้อยกเว้น {
รายการรถไฟ <NewTrain> = ArrayList ใหม่ <NewTrain>();
สตริง sstartCity = CityCode.format (startCity);
สตริง sendCity = CityCode.format (endCity);
TrustManager[] tm = {MyX509TrustManager()} ใหม่;
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, java.security.SecureRandom() ใหม่);
// รับวัตถุ SSLSocketFactory จากวัตถุ SSLContext ด้านบน
SSLSocketFactory ssf = sslContext.getSocketFactory();
ประเภทสตริง = "ผู้ใหญ่";
ถ้า(คือผู้ใหญ่ == 1){
ประเภท = "0X00";
-
สตริง urlStr = "https://kyfw.12306.cn/otn/lcxxcx/query?Purpose_codes="+type+"&queryDate=2014-04-27&from_station="+sstartCity+"&to_station="+sendCity;
URL url = URL ใหม่ (urlStr);
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setSSLSocketFactory(ssf);
InputStreamReader ใน = ใหม่ InputStreamReader(con.getInputStream(),"utf-8");
BufferedReader bfreader = BufferedReader ใหม่ (ใน);
StringBuffer sb = StringBuffer ใหม่ ();
สายอักขระ = "";
ในขณะที่ ((line = bfreader.readLine()) != null) {
sb.ผนวก(บรรทัด);
-
System.out.println(sb.toString());
-
cityCode.format() ของโค้ดนี้เขียนขึ้นเองเพื่อแปลงชื่อเว็บไซต์ภาษาจีนเป็นตัวอักษรผสมกัน บรรทัดต่อไปนี้เกี่ยวกับคำขอ https URL คือ URL ที่เพิ่งได้รับ ผลลัพธ์ที่ได้รับหลังจากการรันโค้ดนี้จะเป็นดังนี้:
เห็นได้ง่ายว่าข้อมูลเหล่านี้เป็นชิ้นส่วนของข้อมูล json (ฉันทำกระบวนการง่ายๆ และขอให้เขาพิมพ์ออกมาทีละชิ้น)
เนื่องจากเป็นข้อมูล json จึงง่ายต่อการจัดการ คุณสามารถวิเคราะห์ความหมายของค่าคีย์ได้โดยการนำข้อมูลมาวิเคราะห์ ฉันวิเคราะห์ค่าสำคัญเพียงไม่กี่ค่าที่ฉันต้องการเท่านั้น
จากนั้นเพียงเขียนคลาส Train เพื่อเก็บข้อมูลตั๋วรถไฟไว้แสดงในภายหลัง
คัดลอกรหัสรหัสดังต่อไปนี้:NewTrain คลาสสาธารณะ {
สตริงส่วนตัว to_station_name; // สถานที่ที่มาถึง
สถานีสตริงส่วนตัว_train_code; //หมายเลขรถไฟ
สตริงส่วนตัว from_station_name; // สถานที่ออกเดินทาง
สตริงส่วนตัว start_time; // เวลาออกเดินทาง
สตริงส่วนตัวมาถึง_เวลา; // เวลาที่มาถึง
String lishi ส่วนตัว // ต้องใช้เวลา
สตริงส่วนตัว zy_num; // จำนวนที่นั่งชั้นหนึ่ง
สตริงส่วนตัว ze_num; // จำนวนที่นั่งชั้นสอง
สตริงส่วนตัว swz_num; // จำนวนที่นั่งทางธุรกิจ
สตริงส่วนตัว gr_num; // จำนวนหมอนนุ่มระดับพรีเมี่ยม
สตริงส่วนตัว rw_num; // จำนวนหมอนนุ่ม
สตริงส่วนตัว rz_num; // จำนวนที่นั่งแบบนุ่ม
สตริงส่วนตัว yw_num; // จำนวนผู้นอนหลับยาก
สตริงส่วนตัว yz_num; // จำนวนที่นั่งแบบแข็ง
สตริงส่วนตัว tz_num; // จำนวนที่นั่งพิเศษ
สตริงส่วนตัว wz_num; // ไม่มีจำนวนที่นั่ง
-
งานต่อไปนั้นง่ายมาก ใส่ข้อมูล json ลงในวัตถุคลาส Train
เอาล่ะ งานพื้นฐานเสร็จสิ้นแล้ว ขั้นตอนต่อไปคือการรวมฟังก์ชันต่างๆ เข้ากับโปรเจ็กต์
ไฟล์ txt ที่ประกอบด้วยชื่อเว็บไซต์ภาษาจีนและตัวอักษรที่ใช้ (อ่าน txt เพื่อให้ได้ตัวอักษรที่ตรงกับชื่อเว็บไซต์ภาษาจีนผสมกัน บางไฟล์อาจไม่สมบูรณ์