复写(Rewrite)
Rewrite 用于按条件修改 HTTP 请求或响应,也可以替换 URL、返回重定向、拒绝请求或生成 Mock 数据。
本文介绍 Loon 3.5.1 (978) 起支持的新语法。
生效范围
Rewrite 仅对 HTTP 和经过 MitM 解密的 HTTPS 请求生效,并在规则匹配前执行。
可视化生成
可以使用 Rewrite 配置生成器 组合条件和 Action,并直接复制生成结果。
快速开始
每条 Rewrite 使用一行配置,基本格式为:
<phase> if <condition> then <action> [| <action> ...]
为请求设置 Header:
request if ${url} ~= /^https:\/\/api\.example\.com/ then request.header.set("X-Loon", "true")
修改 JSON 响应:
response if ${url} ~= /^https:\/\/api\.example\.com\/profile$/ && ${response.status} == 200 then response.json.replace("data.vip", true)
多个 Action 使用 | 连接,并按照从左到右的顺序执行:
request if ${url} ~= /^https:\/\/api\.example\.com/ then request.header.set("X-Loon", "true") | request.header.del("Cookie")
执行阶段
| 阶段 | 执行时机 | 可用数据 |
|---|---|---|
request | 请求发出前 | URL、请求方法、请求 Header |
response | 收到响应 Header 后 | 请求数据、响应状态码、响应 Header |
请求和响应 Action 通常需要分开配置:
request if ${url} ~= /^https:\/\/example\.com/ then request.header.set("X-Test", "request")
response if ${url} ~= /^https:\/\/example\.com/ then response.header.set("X-Test", "response")
一条普通 Rewrite 不能同时包含请求 Action 和响应 Action。
response.body.mock(...) 是特殊情况:配置阶段仍写作 response,但 Loon 会在请求发往上游前提前生成响应。具体限制参见 Mock 响应 Body。
条件表达式
比较操作符
| 操作符 | 说明 |
|---|---|
== |