抓包工具之fiddler

抓包工具之fiddler

一、HTTP代理

在這裏插入圖片描述

二、fiddler

2.1 安裝

在這裏插入圖片描述
在這裏插入圖片描述

2.2 認識fiddler

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

2.3 app抓包

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

三、綜合練習

利用fiddler抓包,編寫一個12306火車票查票程序

import requests
import json
import csv
#  注意cookie值會過期,報錯,請重新設置cookie
headers = {
    'Cookie': 'BIGipServerpool_index=821035530.43286.0000; RAIL_EXPIRATION=1572017654075; RAIL_DEVICEID=AdfXWpWAdOcsfqpZcp69z03jVG2YmLBqQF2VenNG5feRJSf0QS7WxtLeTWxrilU3rQGv03d74zyJVwZRYLEFV_kr2_Hn1fVGPjGaWh3ehYI3eZsJ9xfGB9K21c9jMKf04A8NnCrVXCptD2U7u9U_bb-XwC52ptaJ; route=6f50b51faa11b987e576cdb301e545c4; BIGipServerotn=904921610.38945.0000',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36'
}


class CheckTicket:
    def __init__(self, date, from_station, to_station, headers=None):
        self.date = date
        self.from_station = from_station
        self.to_station = to_station
        self.headers = headers
        self.station_data = {}
        # 獲取所有車站信息
        station = requests.get(
            "https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9114",
            headers=self.headers)
        # print(station.text)
        station_str = station.text
        station_list = station_str.split("@")[1:]
        # 車站名與代號進行映射
        for i in station_list:
            station_name = i.split("|")[1:3]
            self.station_data[station_name[0]] = station_name[1]
            # print(station_name)
        # print(station_list)
        print(self.station_data)

    def check_result(self):
        url = "https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT".format(
            self.date, self.station_data[self.from_station], self.station_data[self.to_station])
        res = requests.get(url, headers=self.headers)
        res.encoding = "utf-8"
        # print(res.text)
        data = json.loads(res.text)
        # print(data, type(data))
        results = data["data"]["result"]
        print(results, len(results))
        t_headers = ["車次", "上車站", "下車站", "出發時間", "到達時間", "耗時", "高級軟臥", "軟臥", "軟座", "無座", "硬臥", "硬座", "二等座", "一等座",
                     "商務座"]
        result_list = []  # 用來存儲最終查詢的結果(列車的所有信息)
        for result in results:
            # 對每輛列車的信息進行切割,再與t_headers進行關係映射
            res_msg = result.split("|")[3:]
            for i in range(10):
                del res_msg[8]
            for i in range(6):
                del res_msg[-1]
            del res_msg[9]
            del res_msg[12]
            del res_msg[14]
            for i in range(2):
                del res_msg[1]
            for i in range(1, 3):
                # 通過字典的值,找到對應的鍵
                key_list = list(self.station_data.keys())
                value_index = list(self.station_data.values()).index(res_msg[i])
                res_msg[i] = key_list[value_index]
            # 更改數據類型,添加到列表,統一寫入
            res_tuple = tuple(res_msg)
            result_list.append(res_tuple)
            print(res_msg)
        with open("check_ticket.csv", "w", encoding="gbk")as f:
            write = csv.writer(f)
            write.writerow(t_headers)
            write.writerows(result_list)


if __name__ == "__main__":
    my_check = CheckTicket(date="2019-10-30", from_station="長沙", to_station="深圳", headers=headers)
    my_check.check_result()

效果圖
在這裏插入圖片描述
在這裏插入圖片描述

發佈了96 篇原創文章 · 獲贊 36 · 訪問量 6193
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章