resBody
resBody 协议用于替换指定请求的响应内容体,仅对包含响应内容体的状态码(如 200、500 等)有效。
生效条件:仅对有响应内容体的状态码生效 ⚠️ 注意:
204、304等无响应内容体的请求不受影响
规则语法
resBody 支持多种方式指定要替换的响应内容:
1. 内联值(直接指定)
直接在规则中写明要替换的内容,适用于简短的文本内容。
txt
pattern resBody://(value) [lineProps...] [filters...]示例:
txt
www.example.com/api/data resBody://({"status":"modified"})2. 内嵌值(使用代码块)
当需要处理包含空格、换行符的复杂内容,或希望复用某段配置时,推荐使用此方式。
txt
pattern resBody://{custom-key.json} [lineProps...] [filters...]
``` custom-key.json
{
"status": "success",
"data": {
"message": "This response was modified by resBody"
}
}
```3. 引用 Values 中的值
当内容较大时,可以将其存储在 Values 配置区中。
txt
pattern resBody://{key-of-values.html} [lineProps...] [filters...]前提:在 Values 中存在名为 key-of-values.html 的键,其值为要替换的内容。
4. 从文件路径或远程 URL 加载
从本地文件或远程 URL 加载要替换的响应内容。
txt
# 从本地文件加载
pattern resBody:///User/xxx/test.txt
# 从远程 URL 加载
pattern resBody://https://www.example.com/override-content.txt5. 从临时文件中加载
当需要频繁编辑内容时,可以使用 Whistle 提供的临时文件功能。
txt
pattern resBody://temp/blank.txt操作步骤:
- 在 Rules 编辑器中,按住
Command(Mac)/Ctrl(Windows) - 鼠标点击
resBody://temp/blank.txt - 在弹出的编辑对话框中输入替换内容
- 点击
Save保存
参数详解
| 参数 | 是否必填 | 描述与示例 |
|---|---|---|
| pattern | 是 | 用于匹配请求 URL 的表达式。 • 支持域名、路径、通配符、正则表达式。 • 详见 匹配模式文档。 |
| value | 是 | 要替换的响应内容,支持多种格式: • 本地文件路径 • 远程 URL • 内联、内嵌、Values 引用内容 |
| lineProps | 否 | 为规则设置附加属性。 • 例如: lineProps://important 可提升此规则的优先级。• 详见 lineProps 文档。 |
| filters | 否 | 可选的过滤条件,用于精确控制规则生效的场景。 • 可匹配请求的 URL、方法、头部、体内容。 • 可匹配响应的状态码、头部。 • 详见 过滤器文档。 |
配置示例
基础示例
txt
# 替换 API 响应内容
www.example.com/api/data resBody://({"status":"custom","data":"modifiedContent"})使用内嵌值
txt
``` error-response
{
"error": {
"code": 1001,
"message": "Custom error message for testing"
}
}
```
www.example.com/api resBody://{error-response} includeFilter://s:500从文件加载
txt
# 从本地文件加载替换内容
www.example.com/api/config resBody:///Users/username/mock/config.json
# 从远程 URL 加载替换内容
www.example.com/api/data resBody://https://raw.githubusercontent.com/user/repo/main/mock-data.json使用临时文件
txt
www.example.com/api/user resBody://temp/blank.json在 Rules 编辑器中,按住
Command(Mac)/Ctrl(Windows)并用鼠标点击resBody://temp/blank.json进行编辑
配合过滤器使用
txt
# 仅替换特定状态码的响应
www.example.com/api resBody://({"error":"ServiceUnavailable"}) includeFilter://s:503
# 根据请求方法决定替换内容
www.example.com/api/users resBody://({"method":"GEToverride"}) includeFilter://m:GET
www.example.com/api/users resBody://({"method":"POSToverride"}) includeFilter://m:POST高级用法
动态内容替换
使用正则表达式进行动态内容构造:
txt
# 将原始响应中的时间戳替换为当前时间
www.example.com/api/time resBody://`({"timestamp":${now}})`环境特定替换
txt
# 开发环境:使用模拟数据
dev-api.example.com resBody://{"env":"development","data":"mock"}错误场景测试
txt
# 模拟各种错误响应
www.example.com/api resBody://{"error":"RateLimitExceeded"} includeFilter://s:429
www.example.com/api resBody://{"error":"InternalServerError"} includeFilter://s:500
www.example.com/api resBody://{"error":"ServiceUnavailable"} includeFilter://s:503与 file 协议的区别
resBody 协议与 file 协议的主要区别在于请求处理流程:
处理流程对比
resBody协议:请求先发送到后台服务器获取原始响应,然后用指定内容替换原始响应体file协议:请求不会发送到后台服务器,直接返回指定的文件内容
使用场景对比
resBody:适用于修改真实接口的返回内容,保持请求-响应的完整流程file:适用于完全本地模拟,不依赖真实后端服务
注意事项
响应类型保持
resBody替换的是响应体内容,不会自动修改Content-Type响应头- 如果需要修改响应类型,请配合使用
resType协议
常见问题
Q: resBody 规则没有生效
A: 检查:
- 响应状态码是否有响应体(排除 204、304 等)
- 规则 pattern 是否正确匹配请求 URL
- 过滤器条件是否满足
- 是否有更高优先级的规则覆盖
Q: 能否仅替换特定类型的响应
A: 可以,使用过滤器:
txt
# 仅替换 JSON 响应
pattern resBody://content includeFilter://resH:content-type=json
# 仅替换特定路径的响应
pattern resBody://content includeFilter://*/api/v1/关联协议
在响应内容前面注入内容:resPrepend
- 在原始响应内容的前面插入内容
在响应内容后面追加内容:resAppend
- 在原始响应内容的后面追加内容
替换请求内容:reqBody
- 替换发送到服务器的请求体内容
直接返回本地文件:file
- 不请求服务器,直接返回本地文件内容
修改响应头:resHeaders
- 修改响应头部信息,如
Content-Type
- 修改响应头部信息,如