Fiddler 配置与使用:从入门到移动端实战

写 iOS/Android App 时,接口返回 500 但完全不知道哪个参数错了?
想理清竞品的完整 API 调用链路,做逆向分析?
测试限时优惠或者支付逻辑时,想把原价改成 1 分钱来模拟?

Fiddler 就是你想要的答案——它是 Windows 平台上最成熟、对移动端支持最好的 HTTP/HTTPS 抓包+调试神器,说它是“网络中间人”的工具箱都不为过。


1. 核心工作原理

一句话概括:Fiddler 就是一个调停双方通信的代理服务器

启动 Fiddler 后,它会悄悄把系统全局代理设置为 127.0.0.1:8888,所有 HTTP/HTTPS 流量都会先经过它,再发给真正的目标服务器,整个链路变成这样:

  1. 客户端(浏览器/App)把请求扔给 Fiddler,而不是直接请求服务器。
  2. Fiddler 接收请求,记录下来,甚至在你允许时可以修改请求内容再转发。
  3. 服务器 看不到真正的客户端,只能看到 Fiddler 替它发的请求,将响应返回给 Fiddler。
  4. Fiddler 再次拦截响应,记录并还可以修改,然后再返回给客户端。

如此一来,客户端和服务器之间的所有信息,都被 Fiddler “看光了”。想要抓包分析、断点篡改、模拟弱网……都可以在这个中间层轻松完成。


2. Fiddler 基础配置

2.1 HTTPS 解密配置(不配等于白装)

HTTPS 就是为了防止中间人窃听和篡改而生,所以默认状态下,Fiddler 只能看到加密的握手隧道记录(灰色 Tunnel to xxx),完全不知道里面传输了什么内容。

要想看到明文数据,必须让 Fiddler 变成“受信任的中间人”,也就是安装并信任它的根证书。

操作步骤:

  1. 打开 Fiddler 顶部菜单:Tools > Options > HTTPS
  2. 依次勾选三个关键选项:
    • Capture HTTPS CONNECTs —— 抓取建立加密连接的隧道请求
    • Decrypt HTTPS traffic —— 对隧道里加密的内容进行透明解密
    • Ignore server certificate errors (unsafe) —— (开发调试时忽略自签名/过期证书)
  3. 第一次勾选 Decrypt HTTPS traffic 时,系统会连续弹出 2-3 个信任对话框,全部点击“是”或“确定”,否则后续电脑或手机端都无法解密流量。

⚠️ 如果某个弹窗你不小心点了“否”,需要回去把勾选重新去掉再选上,重新触发证书安装。

2.2 远程抓包连接配置

想要让 Fiddler“管住”手机的流量,必须允许它接受来自网络内其他设备的连接。

操作步骤:

  1. 打开 Tools > Options > Connections
  2. 确认 Fiddler listens on port8888(可自定义,但后续手机和代码配置要保持一致)
  3. 务必勾选 Allow remote computers to connect
  4. 点击右下角 OK,然后必须重启 Fiddler 让设置生效。

重启后,Fiddler 就会监听到来自手机/其他设备的请求了。


3. 移动端抓包实战指南

这是 Fiddler 最常用、最有价值的场景,分三步走,全程避免踩坑。

3.1 前置准备

先确保两个前提:

  • 电脑和手机 连在同一个 Wi-Fi 下(不能一个有线一个无线,也不能跨路由器频段)
  • 电脑上的 Fiddler 已经重启,并且上一步的远程连接配置已经生效。

3.2 手机端手动设置代理

  1. 查电脑 IP
    Windows 按 Win + R 输入 cmd,再敲 ipconfig,找到「无线局域网适配器 WLAN」下的 IPv4 地址,例如 192.168.31.123

  2. 修改手机 Wi-Fi 代理

    • 长按当前连接的 Wi-Fi 名称 → 选择「修改网络」(部分 Android 手机需要先展开「高级选项」)
    • 代理设置从「无」或「自动」改为「手动」
    • 代理服务器主机名:刚刚查到的电脑 IPv4 地址
    • 代理端口8888
    • 点击「保存」

只要代理填写正确,此时手机上所有上网请求都会先发到 Fiddler。

3.3 手机端证书安装(最容易漏的“最后一步”)

如果只设置了代理,却没有安装并信任 Fiddler 的证书,那么所有 HTTPS 请求依然会以灰色 Tunnel to xxx 的形态出现,无法看到请求和响应的内容。

Android 端安装步骤

  1. 打开手机自带浏览器(不要用 Chrome 最新版,可能拦截自签名证书下载),访问 http://[电脑IP]:8888
  2. 点击页面下方的蓝色链接 FiddlerRoot certificate 下载证书
  3. 进入手机「设置」→ 搜索「安装证书」→ 选择「CA 证书」(部分系统叫「受信任的凭据」或「从存储设备安装」)
  4. 找到刚刚下载的 FiddlerRoot.cer,输入锁屏密码验证后安装。部分机型需要重启手机才能生效。

iOS 端安装步骤(多一步手动信任)

iOS 的证书安装比 Android 多一个关键操作,很多人就卡在这里

  1. Safari 浏览器访问 http://[电脑IP]:8888
  2. 点击 FiddlerRoot certificate,会提示下载「配置描述文件」,点击「允许」
  3. 打开「设置」→ 顶部会显示「已下载描述文件」→ 点击安装,输入锁屏密码,连续点击「安装」→「完成」
  4. ⚠️ 极其重要的一步:再进入「设置」→「通用」→「关于本机」→ 拉到底部「证书信任设置」→ 找到 DO_NOT_TRUST_FiddlerRoot,打开右侧的开关开启信任。

完成这一步后,iOS 设备上的 HTTPS 流量才会被正常解密。


4. FiddlerScript 自定义规则

Fiddler 除了抓包,还能通过一段段小脚本动态修改请求和响应——这就是 FiddlerScript 的威力。你可以把 Fiddler 当成一个可编程的中间人,实现 Mock 接口、自动改价格、添加请求头、重定向域名等操作。

4.1 脚本入口

点击菜单 Tools > Fiddler Script,会打开内置的 CustomRules.js 编辑器。所有自定义逻辑都写在这个文件里,主要用到两个函数:

  • OnBeforeRequest(oS: Session) —— 在请求发送给服务器之前触发
  • OnBeforeResponse(oS: Session) —— 在响应返回给客户端之前触发

4.2 常用代码示例

static function OnBeforeRequest(oS: Session) {
    // 示例1:把测试环境接口重定向到本地开发服务器
    if (oS.HostnameIs("api.test.com") && oS.uriContains("/v1/order")) {
        oS.hostname = "localhost";
        oS.port = 3000;
    }

    // 示例2:自动给登录接口附加测试请求头
    if (oS.uriContains("/user/login")) {
        oS.oRequest["X-Test-Env"] = "sandbox";
        oS.oRequest["User-Agent"] = "Test-Crawler-Bot-2026";
    }
}

static function OnBeforeResponse(oS: Session) {
    // 示例3:修改支付接口返回的价格(模拟1分钱支付)
    if (oS.fullUrl.Contains("pay/submit") && oS.oResponse.MIMEType.Contains("json")) {
        oS.utilDecodeResponse(); // 必须先解码,防止 Gzip 压缩导致乱码
        var oldBody = oS.GetResponseBodyAsString();
        var newBody = oldBody.replace('"totalPrice":99.90', '"totalPrice":0.01');
        oS.utilSetResponseBody(newBody);
    }
}

💡 每次修改 CustomRules.js 后,按 Ctrl + S 保存即可立即生效,无需重启 Fiddler。


5. Python 集成与自动化抓包

假设你用 Python 写了一个爬虫,或用它来做接口自动测试,但不确定发出的请求头、参数、Cookie 是否正确——这时只要把 Python 发出的流量也引流到 Fiddler,所有细节一目了然。

5.1 基础示例代码

import requests
import urllib3

# 关闭 InsecureRequestWarning(仅限本地调试,千万不要用在生产环境)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

# 将 HTTP 和 HTTPS 代理都指向 Fiddler
fiddler_proxies = {
    "http": "http://127.0.0.1:8888",
    "https": "http://127.0.0.1:8888",
}

try:
    response = requests.get(
        url="https://httpbin.org/get",
        proxies=fiddler_proxies,
        verify=False,
        headers={"X-From-Python": "True"}
    )
    print("状态码:", response.status_code)
    print("响应 JSON:", response.json())
except Exception as e:
    print(f"请求出错: {e}")

运行这段脚本后,Fiddler 会话列表里会立刻出现一条来自 Python 的请求,可以在 Inspectors 面板中查看原始请求和响应内容,排查 Header、参数等问题十分方便。


6. 常见问题排查

现象可能的原因及解决方法
手机连上代理后完全上不了网1. 电脑防火墙未关闭或未放行 8888 端口
2. Allow remote computers to connect 未勾选
3. 电脑和手机不在同一 Wi-Fi(注意不要连到访客网络)
HTTPS 流量全是灰色 Tunnel to1. 手机证书未安装或 iOS 未开启根证书信任
2. Fiddler 证书过期:去 Tools > Options > HTTPS > ActionsReset All Certificates 重置后重新安装
某个 App 提示“网络异常”“连接失败”App 开启了 SSL Pinning(证书固定),只信任官方的特定证书
解决办法:Android 可配合 Xposed + JustTrustMe 模块;iOS/Android 通用方案是使用 Frida 脚本绕过校验
电脑浏览器提示“连接不是私密连接”Fiddler 根证书没有安装到受信任的根证书颁发机构
进入 Tools > Options > HTTPS > Actions → 点击 Export Root Certificate to Desktop,然后手动将该证书导入“受信任的根证书颁发机构”

7. 总结与实践路径

Fiddler 远不止是一个“看包工具”,它更像一个可编程的数据中转站与调试助手。如果你是移动端开发、逆向分析或爬虫工程师,建议按下面的路线循序渐进掌握:

  1. 第一步:配好证书,打通 HTTPS 抓包,确保能看到明文请求和响应。
  2. 第二步:使用 Composer 模块,快速重放或修改某个请求,实时验证接口行为。
  3. 第三步:利用 Filters 标签页过滤无关流量(比如广告、系统更新),只关注目标 App 的数据包。
  4. 第四步:深入 FiddlerScript,自动化实现 Mock 数据和规则篡改,最大化提升工作效率。
打开 Filters 后,除了按 Host 过滤,还可以结合 Process(进程)、Request Headers 等维度进一步缩小范围。左侧会话列表的彩色标记(红色=错误,蓝色=修改过)也值得留意,配合这些视觉提示,定位问题的速度会成倍提高。