Fiddler 使用:从 HTTP 抓包到接口调试

在开发 Web、API、移动端应用时,经常会遇到:

  • 前端请求到底发送了什么?

  • Token 和 Cookie 有没有正确携带?

  • 接口为什么返回 401、403 或 500?

  • 浏览器能访问,程序却访问失败?

  • 如何修改请求参数重新测试?

  • 后端接口还没开发好,前端怎么继续联调?

这类问题可以使用 Fiddler 快速定位。

Fiddler 是一款 HTTP/HTTPS 调试代理工具,可以捕获客户端与服务器之间的网络请求,并查看、修改、重放请求和响应。

目前主要有 Fiddler Classic 和 Fiddler Everywhere。Classic 主要面向 Windows,并已经进入维护阶段;Everywhere 是当前的跨平台版本。

1. Fiddler 是什么?

正常情况下:

浏览器
   ↓
Web Server
   ↓
服务器

启用 Fiddler 后:

浏览器
   ↓
Fiddler
   ↓
Web Server

Fiddler 作为代理,可以看到:

Request
├── URL
├── Method
├── Headers
├── Cookie
└── Body

Response
├── Status Code
├── Headers
└── Body

例如:

POST /api/login HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer xxx

以及:

{
    "username": "admin",
    "password": "123456"
}

因此,Fiddler 最核心的价值就是:

把客户端和服务器之间的 HTTP 通信过程直接展示出来。


2. 安装与基本配置

如果只是学习和日常开发,目前更推荐使用 Fiddler Everywhere。

安装完成后启动 Fiddler,首先确认系统代理捕获已经开启。

然后打开浏览器访问一个网站,例如:

https://example.com

如果配置正常,Fiddler 中就会出现对应的 Session。

基本操作流程就是:

启动 Fiddler
    ↓
开启 Capture
    ↓
浏览器访问网站
    ↓
Fiddler 出现请求
    ↓
点击请求查看详情

如果请求很多,可以使用过滤功能,只保留需要关注的域名或 URL。

例如只关注:

api.example.com

或者:

/api/user

实际开发中建议养成习惯:

先过滤,再分析。

否则一个页面几十甚至几百个请求,很容易找到眼花。


3. HTTPS 抓包

现在绝大多数网站都是 HTTPS。

如果只抓 HTTP:

Client
   ↓
Fiddler
   ↓
Server

内容本身就是明文。

HTTPS 则是:

Client
   ↓
TLS 加密
   ↓
Server

Fiddler 如果需要查看 HTTPS 内容,需要安装并信任 Fiddler 的根证书。

通常在 Fiddler 中开启 HTTPS 捕获,然后安装对应证书。

配置完成后重新访问 HTTPS 网站,就可以看到:

Request Headers
Request Body
Response Headers
Response Body

这里需要特别注意:

Fiddler 不是破解 HTTPS。

它实际上是在客户端信任 Fiddler CA 的情况下,建立代理两端的 TLS 连接,从而能够查看经过代理的 HTTPS 内容。

因此不要在不可信设备上随意安装代理 CA,因为这样会让代理具备查看 HTTPS 流量的能力。


4. 如何分析一个请求?

抓到请求后,最重要的是学会看 Request 和 Response。

例如:

POST https://api.example.com/api/login

先看:

URL

确认:

Host
Path
Query

Method

确认:

GET
POST
PUT
PATCH
DELETE

Headers

重点关注:

Authorization
Content-Type
Cookie
Accept
User-Agent
Origin

例如:

Authorization: Bearer eyJ...
Content-Type: application/json

Body

例如:

{
    "username": "admin",
    "password": "123456"
}

Response

最后看:

Status Code
Response Headers
Response Body

例如:

200 OK

或者:

401 Unauthorized
403 Forbidden
500 Internal Server Error

这样一个接口问题基本就可以按照:

URL
 ↓
Method
 ↓
Headers
 ↓
Body
 ↓
Status
 ↓
Response

的顺序排查。


5. Composer:手动发送和重放 API

Fiddler 中非常实用的功能是 Composer。

它可以手动构造 HTTP 请求。

例如:

POST https://api.example.com/api/users

Headers:

Content-Type: application/json
Authorization: Bearer xxx

Body:

{
    "name": "Leanku",
    "age": 30
}

点击发送后,就可以直接看到服务器响应。

更实用的是:

把已经抓到的请求直接复制到 Composer,然后修改后重新发送。

例如原请求:

{
    "product_id": 1001,
    "quantity": 1
}

修改成:

{
    "product_id": 1001,
    "quantity": 999
}

然后重新发送。

这对于:

API 调试
参数测试
Bug 复现
边界测试
权限测试

非常方便。

很多时候,它比重新修改前端代码再点击页面测试效率高得多。


6. Breakpoint:修改请求后再发送

如果想修改一个已经产生的请求,可以使用 Breakpoint。

请求流程:

Client
   ↓
Fiddler
   ↓
暂停
   ↓
修改 Request
   ↓
Server

例如客户端发送:

{
    "quantity": 1
}

Fiddler 暂停请求后,可以修改为:

{
    "quantity": -1
}

然后继续发送。

这样可以测试服务器对于异常参数的处理。

常见测试包括:

quantity = 0
quantity = -1
quantity = 999999
id = null
id = abc
token = invalid

对于后端开发来说,这个功能非常适合验证:

参数校验
权限控制
异常处理
边界条件

7. AutoResponder:接口 Mock

如果后端接口还没有开发完成,但前端已经需要联调,可以使用 AutoResponder。

例如前端请求:

GET /api/config

正常情况:

Frontend
   ↓
Backend
   ↓
接口还不存在

使用 AutoResponder 后:

Frontend
   ↓
Fiddler
   ↓
Mock Response

例如返回:

{
    "code": 0,
    "message": "success",
    "data": {
        "version": "1.0.0",
        "maintenance": false
    }
}

这样前端不需要等待后端接口完成。

AutoResponder 还可以用于模拟:

200
400
401
403
404
500

以及模拟响应延迟。

因此可以用它测试:

正常流程
错误流程
接口超时
接口异常

例如模拟接口 5 秒才返回,就可以观察前端是否正确处理 Loading 和 Timeout。


8. 实际开发中的几个典型场景

场景一:前端说“接口有问题”

不要直接开始查后端代码。

先用 Fiddler 看实际请求:

URL
Method
Headers
Cookie
Body

然后看 Response。

例如发现:

{
    "code": 10001,
    "message": "name is required"
}

同时请求 Body 是:

{
    "name": ""
}

那么问题已经非常明确:

客户端参数错误

场景二:接口返回 401

检查:

Authorization: Bearer xxx

有没有发送。

如果没有:

客户端认证信息没有携带

如果存在:

Authorization: Bearer xxx

再进入服务端检查 Token。


场景三:Cookie / Session 丢失

登录响应:

Set-Cookie: session_id=abc123

后续请求应该出现:

Cookie: session_id=abc123

如果没有:

客户端没有正确保存或发送 Cookie

如果已经发送,但服务器仍然认为未登录:

继续检查服务器 Session

场景四:浏览器正常,程序失败

例如:

浏览器:200 OK
PHP:401 Unauthorized

可以分别抓取两个请求,然后比较:

URL
Method
Authorization
Cookie
Content-Type
Accept
Request Body

通常很快就能发现差异。


场景五:测试异常参数

抓取正常请求:

{
    "amount": 100
}

复制到 Composer,然后测试:

{
    "amount": -100
}

再测试:

{
    "amount": 999999999
}

观察服务器是否正确进行参数校验。


总结

对于开发者来说,Fiddler 不需要把所有功能都学完,掌握下面这条流程就已经非常实用:

抓包
 ↓
过滤
 ↓
查看 Request
 ↓
查看 Response
 ↓
Composer 重放
 ↓
修改参数
 ↓
Breakpoint
 ↓
AutoResponder Mock

最值得掌握的几个功能就是:

功能用途
Capture抓取 HTTP/HTTPS 请求
Inspectors查看 Request / Response
Filters快速找到目标请求
Composer手动发送、重放 API
Breakpoint暂停并修改请求
AutoResponderMock 接口、模拟异常

如果你是后端开发者,Fiddler 最重要的用途并不是“看网络请求”,而是:

当客户端、服务器、API、认证、Cookie 或网络行为出现问题时,直接看到真实的 HTTP 通信内容。

掌握 Fiddler 后,很多“到底是谁的问题”的接口 Bug,都可以从猜测变成证据驱动的排查。

官方文档/资料: