Python Fiddler组合是解决HTTP/HTTPS抓包和自动化处理的最佳搭档,你只需要配置好Fiddler作为代理,再用Python脚本读写Fiddler的会话数据,就能高效完成爬虫开发和接口调试。
Python Fiddler怎么用:从零搭建抓包环境
很多初学者面对“Python Fiddler怎么用”这个问题时,往往卡在环境配置上,只要理清Fiddler和Python各自的分工,搭建过程并不复杂。
为什么选择Fiddler而非其他抓包工具
在抓包工具领域,Fiddler与Charles、Wireshark常被放在一起对比,行业共识认为,Fiddler在Windows平台上的脚本扩展能力是它最大的优势。
- 平台兼容性:Fiddler原生运行在Windows上,通过Python的win32com库可以直接调用它的COM接口,实现自动化控制,而Charles虽然跨平台,但缺乏类似的脚本接口。
- 价格因素:Fiddler个人版完全免费,Charles则需要付费授权,对于预算有限的个人开发者或小型团队,Python Fiddler组合显然更划算。
- 功能侧重:Wireshark擅长底层协议分析,而Fiddler专注于HTTP/HTTPS,配合Python处理上层数据时更直观。
Python Fiddler环境搭建步骤
搭建环境分为两个部分:Fiddler配置和Python准备。
-
安装Fiddler并开启HTTPS解密
下载安装后,依次点击Tools->Options->HTTPS,勾选Decrypt HTTPS traffic,在弹出的证书信任警告中选择“是”,这一步是抓取HTTPS流量的关键,许多Python Fiddler教程都会强调这个步骤。 -
安装Python和相关库
建议使用Python 3.8以上版本,除了标准库,还需要安装pywin32(用于COM操作)和requests(用于后续测试)。
命令示例:pip install pywin32 requests -
验证代理联通性
启动Fiddler,默认代理地址为0.0.1:8888,在Python中设置代理发送请求:
import requests proxies = {"http": "http://127.0.0.1:8888", "https": "http://127.0.0.1:8888"} response = requests.get("https://www.baidu.com", proxies=proxies) print(response.status_code)如果返回200,说明Fiddler已成功捕获Python的请求,此时你可以在Fiddler的会话列表中看到对应的请求记录。
Python Fiddler抓包实战:爬取某网站数据
环境搭建好后,我们通过一个具体场景来演示Python Fiddler抓包实战,假设你需要抓取某个电商网站的商品列表,但网站有反爬机制,直接请求容易被拦截,这时Fiddler作为中间代理,可以帮你分析真实请求特征,并模拟浏览器行为。
配置Fiddler过滤与保存
当Fiddler开始捕获流量后,会话列表会快速堆积,你需要过滤出目标域名,减少无关数据干扰。
- 设置过滤器:在Fiddler右侧的
Filters标签页中,勾选Use Filters,然后在Hosts区域选择Show only the following Hosts,输入目标域名(如.example.com)。 - 自动保存会话:为了方便Python读取,可以在
Rules->Automatic Save Options中设置保存路径和格式(推荐.saz格式),但更直接的方式是使用Fiddler的脚本功能,让每次请求发生时自动写入文件。
Python脚本读取会话数据
Fiddler提供了一个COM接口,Python可以通过win32com.client直接操作正在运行的Fiddler实例。
import win32com.client
import time
fiddler = win32com.client.Dispatch("FiddlerApplication")
# 等待Fiddler捕获一些会话
time.sleep(10)
# 获取当前所有会话
sessions = fiddler.CurrentSessions
for session in sessions:
print(session.RequestHeaders, session.ResponseHeaders)
注意:首次运行前,需要确保Fiddler已启动,并且在
Tools -> Options -> General中勾选了Allow remote computers to connect(即使是在本地,也需要开启COM权限)。
解析响应并提取关键字段
得到会话对象后,你可以提取请求URL、响应体、Cookie等信息,以下是一个提取JSON数据的示例:
import json
for session in sessions:
if "/api/product/list" in session.RequestHeaders["Host"] + session.RequestHeaders["Path"]:
# 获取响应体文本
response_body = session.GetResponseBodyAsString()
data = json.loads(response_body)
for product in data["products"]:
print(product["name"], product["price"])
这种方式避免了直接分析网页HTML,直接从接口获取结构化数据,效率更高。
进阶技巧:Python Fiddler自动化与调试
基础抓包只能被动查看,真正的生产力在于自动化,Python Fiddler组合可以让你编写脚本,自动修改请求、重放测试,甚至模拟弱网环境。
使用Python控制Fiddler会话
通过COM接口,你不仅能读取,还能修改会话,在请求发送前自动添加Token:
fiddler.BeforeRequest += on_before_request
def on_before_request(oSession):
if "example.com" in oSession.RequestHeaders["Host"]:
oSession.RequestHeaders["Authorization"] = "Bearer your_token"
将这个脚本加载到Fiddler的FiddlerScript中,每次请求都会自动触发,这种方式在接口测试中非常实用,无需手动修改每个请求。
常见问题与性能优化
在实际使用中,Python Fiddler抓包可能会遇到几个问题。
- Fiddler无法捕获Python请求:检查代理设置是否正确,以及Python环境中是否配置了系统代理,如果使用
requests,务必显式设置proxies参数。
- HTTPS证书错误:确保Fiddler的根证书已安装到受信任的根证书颁发机构,对于Python的
requests库,可以通过设置verify=False暂时绕过,但生产环境建议使用certifi库来管理证书。 - 性能瓶颈:当大量请求并发时,Fiddler可能会成为瓶颈,建议在Fiddler的
Tools->Options->Performance中调整缓冲区大小,或者在Python脚本中增加过滤条件,只捕获需要的请求。
Python Fiddler抓包常见问题
Python Fiddler怎么用代码控制自动保存会话?
你可以通过Fiddler的COM接口监听OnBeforeResponse事件,在每次响应返回时将会话信息写入本地文件或数据库,示例代码:
fiddler.OnBeforeResponse += on_response
def on_response(oSession):
with open("sessions.txt", "a") as f:
f.write(f"{oSession.URL}t{oSession.GetResponseBodyAsString()[:100]}n")
在APP抓包场景中,如何让手机端流量经过Fiddler?
首先确保手机和电脑处于同一局域网,设置手机代理为电脑IP加Fiddler端口(如168.1.5:8888),然后在电脑上安装Fiddler证书并导出给手机安装,这一步是Python Fiddler手机抓包的关键,很多Python Fiddler教程都会重点讲解证书安装步骤。
Fiddler和mitmproxy哪个更适合Python开发者?
两者各有优劣,Fiddler的GUI更直观,COM接口在Windows上非常稳定;mitmproxy是纯Python实现,跨平台且支持脚本写Python插件,如果你主要使用Windows且需要可视化调试,Python Fiddler组合更顺手,如果你追求全平台统一环境,mitmproxy是更好的选择,但两者都可以实现类似的功能,选择取决于你的工作流。
Python和Fiddler的结合,让你在抓包和接口调试中如虎添翼,掌握这套组合,无论是爬虫还是接口测试,都能事半功倍。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/509170.html



