Network 脚本与重写
这是两套独立于插件的能力,入口都在「网络调试」页:
- 脚本:写
onRequest/onResponse,用 JS 改请求、改响应; - 重写:不写代码,按 URL / 方法 / 状态码命中,做替换、修改、重定向。
它们和插件没有依赖关系,不装插件也能用。
入口
网络调试 → 右上角菜单 → 脚本 / 重写 / Network 规则。
也可以在某条请求的详情页点「用脚本处理此请求」或「为此请求新建重写」,会自动带上 URL 与方法。
脚本
一条脚本由什么组成
| 字段 | 说明 |
|---|---|
| 名称 | 自己看得懂就行 |
| 方法 | ANY / GET / POST / PUT / DELETE / PATCH / HEAD / OPTIONS |
| 匹配 | 精确字符串,或勾选「正则」 |
| 启用 | 单条开关 |
| 代码 | onRequest / onResponse 两个回调 |
回调契约
js
function onRequest(request) {
// request = { url, method, header, data, ... } —— 就是 wx.request 的参数
request.header['X-WeAppDev'] = '1';
return request;
}
function onResponse(response, url) {
// response = { statusCode, header, data, ... } —— wx.request success 的回参
response.data = response.data.replace('39.9', '0.01');
return response;
}要点:
- 直接改对象字段,宿主会带着改后的对象继续往下走;
onRequest里能改url、method、header、data;onResponse里能改statusCode、header、data;console.log会进入 App 的日志面板与 Chrome Console;- 脚本在逻辑层捕获通道里执行,需要打开网络捕获才会生效;
- 保存后约 1 秒内热更新,不用重开小程序。
返回值
脚本是「就地修改」模型,返回对象只是写法习惯;真正生效的是你对 request / response 字段的修改。
三个能直接用的例子
加一个调试头
js
function onRequest(req) {
req.header['X-Debug-By'] = 'WeAppDev';
return req;
}把接口 mock 掉
js
function onResponse(res, url) {
if (url.indexOf('/api/vip/check') >= 0) {
res.statusCode = 200;
res.data = JSON.stringify({ code: 0, vip: true });
}
return res;
}改价格
js
function onResponse(res) {
var body = typeof res.data === 'string' ? res.data : JSON.stringify(res.data);
res.data = body.replace('"price":39.9', '"price":0.01');
return res;
}重写
重写是配置化的规则,不用写代码。五种行为:
| 行为 | 作用 |
|---|---|
| 替换请求 | 整体替换请求行 / 头 / 体 |
| 替换响应 | 整体替换状态码 / 头 / 体 |
| 修改请求 | 按规则局部改参数、头、Body |
| 修改响应 | 按规则局部改响应内容 |
| 重定向 | 把请求转发到另一个地址 |
命中条件
- URL:精确字符串,或正则;
- 方法:
ANY或具体方法; - 可叠加状态码(响应侧)。
重定向示例
text
匹配:https://api.weapp.dev/*
行为:重定向
目标:https://staging.weapp.dev/v2/$1正则里的 $1 会带上捕获组。
修改 Body 示例
text
匹配:POST https://api.weapp.dev/v2/order/submit
行为:修改请求
规则:把 "price": 39.9 替换为 "price": 0.01脚本 vs 重写 vs 插件
| 脚本 | 重写 | 插件 | |
|---|---|---|---|
| 写代码 | 要 | 不要 | 要 |
| 有 UI 面板 | 无 | 无 | 有 |
| 依赖插件系统 | 否 | 否 | 是 |
| 适合 | 复杂逻辑、动态判断 | 固定 mock、重定向 | 完整工具、面板、存储 |
三者可以同时存在。插件的 wad.net.addRule 创建的是重写规则,归属该插件;卸载插件时会一并清掉。
边界
- 脚本作用在逻辑层
wx.request这条链路;Cronet 边界的请求由重写规则处理; - 脚本需要捕获开启,暂停捕获后不再执行;
- 大响应体不适合在脚本里做全量字符串替换,容易卡顿;
- 规则保存在 App 内,对之后打开的小程序仍然生效,直到删除。