抓包工具之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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章