通过插件 · 网络重写
插件通过 capture.addRule(rule) 往宿主网络栈注册声明式规则。规则在请求/响应经过网络层时执行,不需要写 JS 回调。
最小示例
js
wadPanelLayer.onReady(async () => {
const rule = await wadPanelLayer.capture.addRule({
name: 'VIP mock',
match: {
url: 'contains:/api/vip/check',
method: 'GET'
},
response: {
setStatus: 200,
setHeader: { 'x-debug': '1' },
setBody: JSON.stringify({ code: 0, vip: true })
},
enable: true
});
wadPanelLayer.log('rule id =', rule.id);
});capture.addRule 返回 Promise<{id}>;capture.rules() 返回规则数组;capture.removeRule(id) 删除。
匹配条件
| 字段 | 说明 |
|---|---|
match.url | contains:xxx(子串)或 regex:xxx(正则);裸字符串按 contains |
match.method | GET / POST / …;留空匹配所有方法 |
match.status | 响应侧可选,按状态码过滤 |
动作字段
| 阶段 | 动作 |
|---|---|
request | setUrl · setMethod · setHeader{} · removeHeader[] · setBody · replaceBody{from,to,regex?} |
response | setStatus · setHeader{} · setBody · replaceBody{from,to,regex?} |
js
(async () => {
// 请求侧:把旧域名换掉,并补一个头
await wadPanelLayer.capture.addRule({
match: { url: 'prefix:https://api.old.example', method: 'ANY' },
request: {
setUrl: 'https://api.new.example',
setHeader: { 'x-migrated': '1' }
}
});
// 响应侧:只替换文本里的价格
await wadPanelLayer.capture.addRule({
match: { url: 'contains:/api/price', method: 'POST' },
response: {
replaceBody: { from: '39.9', to: '0.01', regex: false }
}
});
})();查询与清理
js
(async () => {
const rules = await wadPanelLayer.capture.rules(); // 本插件名下规则
for (const r of rules) {
if (r.name === 'VIP mock') await wadPanelLayer.capture.removeRule(r.id);
}
})();执行顺序
- 声明式规则(先于 JS hook)
- Network 脚本(免插件脚本)
- 插件网络脚本(
capture.intercept)
规则只影响命中请求;插件内部请求带 ignore_wmpf_network_debug=1,不会被自己的规则改写。