模拟响应

Chute 可以为匹配的 HTTP/HTTPS 请求返回模拟数据。对于已解密的 HTTP/2 流,模拟响应会在本地直接应答,不再转发该请求;对于 HTTP/1.1 请求(普通代理和 MitM HTTP/1.1),请求仍会被发送到真实服务器,真实响应在到达客户端之前会被替换为模拟数据。这对于测试、开发或用自定义响应阻止不需要的内容非常有用。

模拟响应规则定义在 [Map Local] 段中。

每个请求只会应用一条模拟响应规则——即第一条 URL 模式匹配的规则。

Map Local 格式

用于从本地文件、内联文本或 base64 编码内容提供模拟响应,并可指定状态码和响应头:

[Map Local]
^https://example\.com/api.* data="/path/to/mock-response.json"
^https://example\.com/page.* data="/path/to/page.html" header="SGVhZGVyOiBWYWx1ZQ=="
^https://example\.com/pixel.* base64="R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
^https://example\.com/api/v2.* data-type=text data="rate limited" status-code=429 header="Content-Type: text/plain|Retry-After: 30"
^https://example\.com/beacon.* data-type=tiny-gif

注意:正则表达式在请求完整 URL 的任意位置匹配——解密后是 https://…,Chute 作为普通 HTTP 代理时是 http://…——所以 ^https://example\.com 已覆盖该主机下的所有路径和查询字符串,无需在结尾加 .*。它从不单独拿路径去匹配,所以 ^/api 这样的模式不会命中。模式会保留原本的大小写,因此 \S、\D、\W、\B 的含义不会被改变;匹配本身不区分大小写。

位于行首或紧跟在空格后面的 # 或 // 会开启一段注释,一直到行尾,除非它在双引号之内;; 从不算注释。见注释。

Map Local 参数

参数 说明
data="/path/to/file" 用作响应正文的文件路径,在请求时读取;配合 data-type 时则是正文本身(见下)。
`data-type=file\ text\ base64\ tiny-gif` data= 的读取方式:file 为文件路径(默认);text 为值本身即正文;base64 为对值做 base64 解码;tiny-gif 为内置的 1×1 GIF,无需 data=(未用 header= 设置 Content-Type 时以 image/gif 发送)。
base64="<encoded>" Base64 编码的响应正文内容(等同于 data-type=base64)。
status-code=<code> 模拟响应的状态码,范围 200–599,默认 200。超出范围时整行无效,作为配置错误报告。
`header="Key: value\ Key2: value2"` 自定义响应头。多个头以 `\ 分隔,每一对在第一个冒号处拆分,因此值本身可以包含冒号(如 URL)。旧的 base64 形式(base64 编码的Key:Value\n` 行)仍然可用。

规则需要有正文来源:data=(文件,或配合 data-type 的文本 / base64)、base64= 或 data-type=tiny-gif;只写 data-type=text 而不写 data= 会得到空正文。无法产生正文的规则(没有正文参数,或文件读不到)不会作答:请求照常发往服务器,后面的模拟响应规则也不会再尝试。

注意:两种形式下,每个头都在第一个冒号处拆分,名称和值两端的空格会被去掉;没有冒号的行会被忽略。

Chute 自己生成的应答——模拟响应(Map Local)、脚本的 response,以及 URL 重写和 REJECT 类策略的应答与错误页——遵守 HTTP:对 HEAD 请求的应答只有头部,其中的 Content-Length 与 GET 得到的相同;状态码为 204、205 或 304 的应答既不带正文,也不带 Content-Length。

模板变量

使用 data= 或 base64= 时,响应正文支持模板变量替换:

变量 替换为
{{url}} 完整的请求 URL,也就是规则看到的那个
{{host}} 请求的主机名
{{path}} 相对 URL 路径
{{method}} HTTP 方法
{{ua}} User-Agent 头部值

示例模拟响应文件(response.json):

{
    "requested_url": "{{ "{{url}}" }}",
    "host": "{{ "{{host}}" }}",
    "method": "{{ "{{method}}" }}"
}

注意:对于 HTTPS 请求,必须为匹配的主机名启用 MitM 解密。未启用 MitM 的 HTTPS 流量的模拟响应规则将被忽略。明文 HTTP 请求只有经由 Chute 的 HTTP 代理到达时才会由模拟响应规则应答;经 TUN 接口到达的明文 HTTP 会被原样转发。Chute Android 让所有流量都经过 TUN,除非在设置中打开了系统 HTTP 代理,它会把 Chute 的 HTTP 代理交给应用使用(Android 10 及以上;默认关闭)。

注意:data= 指向的文件由运行 Chute 的设备在请求时读取。从 Chute Dashboard 给 iPhone 添加模拟响应规则时,Mac 上的路径对手机毫无意义——改用 base64= 把内容内联进去,或者把文件放到某个 URL 上并使用 URL 重写。

S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-29 21:57:05

本页为英文版的翻译。如内容有出入,以英文版为准。

results matching ""

    No results matching ""