---
url: https://docs.ogmabox.com/zh/app/match-replace.md
description: 使用 Ogma 匹配与替换规则自动修改捕获的 HTTP 和 WebSocket 流量。
---

# 匹配与替换 {#match-replace}

匹配与替换在流量通过代理时自动修改流量，无需暂停或对每个请求手动操作。

## 规则的工作方式 {#how-rules-work}

每条规则定义要查找的内容及处理方式。当请求或响应符合条件时，规则会立即应用其转换。

规则按列表中的顺序应用。如果两条规则针对同一个头部，第一条匹配的规则先应用，后续规则看到的是该更改的结果。

## 规则字段 {#rule-fields}

| 字段 | 说明 |
| --- | --- |
| 名称 | 规则的标签。使用描述性名称来标识其用途。 |
| 方向 | 规则应用于请求、响应还是两者 |
| 操作 | 要执行的转换（参见下方操作表） |
| 匹配模式 | 依据操作，可为字面量、正则表达式或完整内容 |
| 匹配值 | 要查找的字符串或模式 |
| 替换值 | 要替换成的值 |
| 已启用 | 无需删除规则即可启用或停用的开关 |
| 筛选条件 | 可选的方法、主机、路径和 HTTPQL 条件，用于限制规则应用范围 |

### 操作 {#operations}

| 操作 | 功能 |
| --- | --- |
| 添加标头 | 添加具有固定名称和值的新头部 |
| 移除标头 | 按名称删除头部 |
| 替换标头 | 替换现有头部的值 |
| 替换正文 | 使用匹配值替换消息体的一部分 |
| 路径 / 查询 / 查询参数 | 更改请求路径或查询值 |
| 请求 / 响应行 | 更改选定的 HTTP 起始行组成部分 |
| 状态码 | 更改响应状态 |
| 原始消息 | 同时转换 HTTP 起始行、头部和消息体 |
| WebSocket 载荷 | 替换匹配的客户端/服务器消息内容 |
| 工作流 | 对选定内容运行已启用的转换工作流 |

## 匹配模式 {#match-modes}

**字面文本**匹配精确字符串。适用于固定令牌、头部名称或特定值。

**正则表达式**使用正则表达式匹配。目标内容会变化时使用此模式，例如匹配每次会话都会变化的令牌，或捕获分组并在替换中复用。

在正则表达式替换中，使用 `$1`、`$2` 等捕获分组，在替换值中引用匹配的部分。

**整体替换**将整个选定内容传递给转换，而不是查找子字符串。有些操作（例如添加/移除具名头部）使用字面名称，不提供所有模式。

## 转换完整响应体 {#transforming-a-complete-response-body}

1. 创建并启用**转换**工作流，然后用测试输入验证它。
2. 创建匹配与替换规则，方向设为**响应**，操作设为**工作流（正文）**。
3. 选择**整体替换**匹配模式，并选择工作流。
4. 使用 HTTPQL 筛选条件缩小规则范围，例如：

```text
req.host.eq:"cdn.example.com" AND (req.path.cont:".js" OR resp.headers["Content-Type"].value.cont:"javascript")
```

工作流接收整个消息体，其输出会替换该消息体。\*\*工作流（标头）**转换具名头部，而**工作流（原始标头）\*\*转换头部块。这些输入与响应体不同。

HTTPQL 筛选条件在可用的请求/响应上下文中检查。请求方向的规则不能依赖尚未到达的响应。如果规则产生大量运行，请禁用工作流日志；诊断转换问题时再临时启用。

## 调整规则顺序 {#reordering-rules}

拖动规则行，调整其在列表中的位置。当规则修改同一请求或响应中重叠的部分时，顺序非常重要。

## AI 辅助 {#ai-assist}

在规则编辑器中点击 **使用 AI 填写**，用自然语言描述想要的更改。Ogma 会根据描述生成规则字段。启用规则前，请检查并调整生成的值。

有效提示的示例：

* “移除所有响应中的 X-Frame-Options 头部”
* “将 Authorization 头部值替换为我的测试令牌”
* “给所有请求添加名为 X-Debug、值为 true 的头部”

## 测试规则 {#testing-a-rule}

在为实时流量启用规则前，先用示例请求进行测试：

1. 打开规则编辑器。
2. 将原始 HTTP 请求粘贴到**测试**面板中。
3. 点击**应用规则**。面板会显示结果及应用了哪些规则。
4. 确认输出符合预期。
5. 启用规则。

测试面板还提供**响应**目标，包含状态、头部和消息体输入。请检查已应用规则列表：这测试的是适用的规则，而不只是单独的编辑器字段。

## 匹配与替换与拦截 {#match-replace-vs-intercept}

**匹配与替换**是自动的。规则启用后，无需你采取任何操作，就会转换每个匹配的请求或响应。

**拦截**暂停流量并等待手动决定。当正确的更改取决于你需要逐个请求评估的上下文时，使用拦截。当同一转换应每次应用且无需检查时，使用匹配与替换。

## 常见用途 {#common-uses}

* 在所有请求中替换会话 Cookie，以测试另一个账号。
* 添加启用调试或管理员模式的头部。
* 移除响应中的安全头部，以评估客户端行为。
* 替换重定向响应中硬编码的主机。
* 重写请求路径前缀。

## 相关页面 {#related-pages}

* [拦截](./intercept.md)
* [HTTP 历史记录](./http-history.md)
* [工作流](./workflows.md)
