正文重写

Chute 可以使用正则表达式或 JSONPath 表达式在 HTTP 请求和响应正文中搜索并替换内容。对于 HTTPS 流量,这需要启用 MitM 解密

正文重写规则定义在 [Body Rewrite] 部分中。单个请求可以应用多条规则。

[Body Rewrite]
^https://api\.example\.com/response response regex "old-text" "new-text"
^https://api\.example\.com/request request regex "sensitive" "[redacted]"
^https://api\.example\.com/data jsonpath-response jsonpath $.ads null

规则格式

每条规则遵循以下通用格式:

<URL 正则> [方向] <模式> <模式表达式> <替换内容>

方向

关键字 说明
response 应用于响应正文(省略时的默认值)
request 应用于请求正文

模式

模式 说明
regex 正则表达式搜索替换
jsonpath-response / jsonpath-request / body-jsonpath-response / body-jsonpath-request 基于 JSONPath 的修改

正则模式

对解码后的正文字符串执行标准的正则查找替换。使用 NSRegularExpression (ICU),不区分大小写匹配。替换内容支持捕获组引用($1$2 等)。

<URL 正则> [response|request] regex <模式表达式> <替换内容>

示例 — 从 JSON 响应中移除广告:

[Body Rewrite]
^https://api\.example\.com/feed response regex "\"ads\":\s*\[.*?\]" "\"ads\":[]"

示例 — 清洗请求正文:

[Body Rewrite]
^https://api\.example\.com/submit request regex "\"password\":\s*\".*?\"" "\"password\":\"[FILTERED]\""

示例 — 使用捕获组重新格式化数据:

[Body Rewrite]
// 将 "last, first" 转换为 "first last"
^https://api\.example\.com/users response regex "\"name\":\s*\"(\\w+),\\s*(\\w+)\"" "\"name\":\"$2 $1\""

示例 — 重写响应正文中的内嵌 URL:

[Body Rewrite]
^https://api\.example\.com response regex "https://old-cdn\\.example\\.com" "https://new-cdn.example.com"

包含空格的标记必须用双引号括起来:

[Body Rewrite]
^https://example\.com response regex "old value with spaces" "new value"

要在引号标记中包含字面的双引号,请使用反斜杠转义:\"


JSONPath 模式

使用 JSONPath 表达式修改 JSON 正文。支持在特定路径读取、设置和删除值。

<URL 正则> jsonpath-response|jsonpath-request jsonpath <jsonpath-表达式> [值]

支持的 JSONPath 语法

表达式 说明
$.key 访问对象属性
$.key.subkey 访问嵌套属性
$[0] 按索引访问数组元素
$.key[0].subkey 混合对象和数组访问
$.items[*].name 通配符:数组中的所有元素
$.*.value 通配符:所有属性

值类型

结果
"string" 设置为字符串值
42 设置为整数
3.14 设置为浮点数
true 设置为布尔值 true
false 设置为布尔值 false
null 或省略 删除该路径

示例 — 设置 JSON 字段:

[Body Rewrite]
^https://api\.example\.com/profile jsonpath-response jsonpath $.user.name "Anonymous"

示例 — 删除 JSON 字段:

[Body Rewrite]
^https://api\.example\.com/data jsonpath-response jsonpath $.tracking null

示例 — 通配符修改:

[Body Rewrite]
^https://api\.example\.com/list jsonpath-response jsonpath $.items[*].hidden true

实践示例

从 JSON 响应中剥离追踪参数

从所有 API 响应中移除 trackingIdsessionId 字段:

[Body Rewrite]
^https://api\.example\.com/ jsonpath-response jsonpath $.trackingId null
^https://api\.example\.com/ jsonpath-response jsonpath $.sessionId null

向 HTML 响应注入脚本标签

在所有 HTML 页面的 </body> 之前追加自定义 <script> 标签:

[Body Rewrite]
^https://www\.example\.com/ response regex "</body>" "<script>console.log('injected')</script></body>"

在请求日志中编辑敏感字段

在请求正文到达服务器之前替换掉其中的 API 密钥和令牌:

[Body Rewrite]
^https://api\.example\.com/ request regex "\"apiKey\":\s*\"[^\"]+\"" "\"apiKey\":\"[REDACTED]\""
^https://api\.example\.com/ request regex "\"token\":\s*\"[^\"]+\"" "\"token\":\"[REDACTED]\""

规范化响应中的日期格式

将 ISO 日期替换为更短的格式:

[Body Rewrite]
^https://api\.example\.com/ response regex "(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z" "$1/$2/$3 $4:$5"

禁用应用配置中的功能开关

强制将配置端点中的所有功能开关设为 false

[Body Rewrite]
^https://api\.example\.com/config jsonpath-response jsonpath $.features[*].enabled false

重写缓存响应中的 CDN URL

将对旧 CDN 的所有引用替换为新的 CDN:

[Body Rewrite]
^https://www\.example\.com/ response regex "https://old-cdn\.example\.com" "https://new-cdn.example.com"

处理管线

正文重写自动处理以下内容:

  1. Content-Encoding:支持 gzipdeflate。跳过不支持的编码。
  2. Transfer-Encoding:在处理前对分块传输编码进行去块化。
  3. 解码:在应用重写规则之前解压缩正文。
  4. 重新编码:重新压缩正文并更新 Content-Length。移除 Transfer-Encoding 头部。

默认情况下,重写处理的正文最大大小为 128KB。大于此值的正文将直接透传而不做修改。


注意事项

  • 对于 HTTPS 流量,必须为匹配的主机名启用 MitM 解密
  • 正则匹配不区分大小写。替换模板支持 ICU 捕获组引用:$0(完整匹配)、$1(第一组)、$2(第二组)等。
  • JSONPath 模式仅在正文是有效 JSON 时适用。
  • 正文重写规则应用于解码后(UTF-8)的正文文本。
  • 多条规则可以对同一个请求/响应进行匹配和应用(按定义的顺序应用)。
  • 当规则通过 JSONPath 设置或删除一个不存在的值时,正文将保持不变。
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-06-28 02:09:17

results matching ""

    No results matching ""