使用 Charles 抓包并 mock 单个接口返回值有多种方法,包括:
-
✅ Map Local(本地映射)
-
✅ Map Remote(远程映射)
-
✅ Rewrite(重写响应)
-
✅ Breakpoints(断点修改返回)
-
✅ Charles Scripting(高级脚本,自动修改响应)
以下是每种方法的原理解释 + 操作步骤 + 注意事项,你可以根据不同需求选择合适的方式。
1️⃣ Map Local(本地映射)【最常用】
✅ 原理:
将某个接口请求的响应,替换为你本地的一个文件(如 JSON),实现 mock 返回。
🛠 操作步骤:
① 捕获接口请求
-
确保设备或浏览器配置了 Charles 代理
-
发起目标请求,Charles 中出现如:
https://api.example.com/user/info
② 保存或编写本地响应文件
-
右键该请求 → Save Response...
-
保存为本地 JSON 文件,比如:
mock_info.json
-
可以用编辑器修改为你想返回的数据
③ 设置 Map Local
-
菜单栏 →
Tools > Map Local
-
点击
Add
-
Host:填写
api.example.com
-
Path:填写
/user/info
-
Local Path:选择
mock_info.json
-
④ 确保 Map Local 功能开启
-
菜单栏中
Proxy > Map Local
要勾选 ✅ -
确保 Charles 工具栏按钮为绿色(表示启用)
⑤ 测试是否生效
-
再次访问接口,Charles 会返回本地 JSON 内容
⚠️ 注意:
-
文件路径必须正确
-
支持 JSON、HTML、XML、文本等格式
-
Mock 文件需注意编码(UTF-8)
2️⃣ Map Remote(远程映射)
✅ 原理:
将请求重定向到另一个远程接口地址,可以 mock 成测试环境、备用服务器等。
🛠 操作步骤:
-
菜单栏 →
Tools > Map Remote
-
点击
Add
-
Host:原始接口地址(如:
api.example.com
) -
Path:原接口路径(如:
/user/info
) -
Remote Host:替换目标地址(如:
test-api.example.com
) -
Remote Path:新路径(如:
/mock/user/info
)
-
-
确保
Map Remote
功能已启用 -
重新访问接口,看是否被重定向成功
✅ 应用场景:
-
从生产环境切换到测试环境
-
远程 mock 平台(如:mocky.io、mockapi.io)
3️⃣ Rewrite(响应内容重写)【强大灵活】
✅ 原理:
通过规则匹配请求或响应,然后对其内容进行修改,比如替换 JSON 字段。
🛠 操作步骤:
① 开启 Rewrite 功能
-
菜单栏 →
Tools > Rewrite
-
点击左下角
+
添加规则,命名如:mock_user_info
② 添加条件匹配规则
-
在
Locations
中添加目标接口:-
Host:
api.example.com
-
Path:
/user/info
-
③ 添加修改响应的规则(Modify Response)
-
选中
Modify Response
→Body
-
点击
Add
:-
Match
:原始内容或字段(用正则匹配) -
Replace
:替换后的字段或值
-
✅ 示例:
将返回中的 "status":1
替换成 "status":0
Match: "status":\s*1
Replace: "status": 0
④ 重新访问接口,验证修改结果
⚠️ 注意:
-
使用正则匹配响应体内容,需要有一定文本处理能力
-
不适合大段 JSON 替换,更适合字段级别替换
4️⃣ Breakpoints(断点修改响应)
✅ 原理:
在请求或响应过程中打断点,手动修改返回内容。
🛠 操作步骤:
① 设置断点
-
选中目标接口 → 右键 →
Breakpoints
-
或菜单栏 →
Proxy > Breakpoints Settings
→ 添加断点规则
② 启用断点功能
-
确保菜单栏
Proxy > Breakpoints
是勾选状态 ✅
③ 触发请求并修改响应
-
发起请求时,Charles 弹出窗口,显示请求或响应内容
-
切换到
Response
标签页,修改返回 JSON 内容 -
点击 Execute 继续返回给客户端
✅ 优点:
-
灵活临时修改响应
-
不需提前准备本地文件
⚠️ 缺点:
-
每次都需手动干预
-
不适合自动化测试或频繁请求
5️⃣ 使用 Charles Scripting(高级)
✅ 原理:
使用 Charles 的 JavaScript 脚本功能(Beta)自动修改响应内容(需要 Charles 5+)。
🛠 操作大致思路:
-
菜单栏
Tools > Scripting
-
添加 JavaScript 脚本,如监听特定接口并修改返回内容
-
参考 Charles 脚本 API(查阅官方文档)
// 示例伪代码
function responseReceived(request, response) {
if (request.url.contains("/user/info")) {
response.bodyText = '{"code":0,"msg":"mocked"}';
}
}
⚠️ 说明:
-
比较适合自动化、持续性 mock
-
使用门槛略高,适合高级用户或测试工程师
🔚 总结对比
方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
Map Local | 简单直观、一次配置多次使用 | 需准备本地文件 | 固定接口 mock |
Map Remote | 指向远程 mock 服务器 | 不支持本地 JSON | 重定向环境 |
Rewrite | 精细替换字段,规则灵活 | 复杂 JSON 不好处理 | 微调字段 |
Breakpoints | 手动即时修改 | 每次都要手动改 | 临时调试 |
Scripting | 自动化程度高 | 需脚本能力 | 高级测试场景 |