iOS 改包与接口 Mock:重写 HTTP 请求和响应
NetPeek 的重写规则由“生效条件”和“执行动作”组成,可在不修改 App 代码的情况下改 Header、替换 Body、Mock 响应、拦截请求、重定向或用本地文件返回内容。
3重写规则(简单模式)
重写 = 不改代码就改包:加请求头、替换响应字段、Mock 接口、拦广告、重定向。一条规则 =「什么时候生效(条件)」+「做什么(动作)」。新手用简单模式,点几下即可。
- 从最近请求左滑选「新建重写」(自动预填域名/路径),或到重写列表点 +。
- 什么时候生效:选「所有请求」或加条件(域名包含 / 路径开头是 …)。
- 你想做什么:六张意图卡片任选其一。
- 改成什么:按意图填字段。下方实时显示一句人话摘要,确认无误点保存并启用。
| 意图 | 用途 |
|---|---|
| 改 Header | 给请求/响应加、改、删一个头 |
| 改 Body | 把响应/请求正文里的一段文本替换掉 |
| Mock 响应 | 不发真实请求,直接返回自定义内容 |
| 拦截请求 | 返回空响应 / 空 JSON / 空图片,常用于屏蔽广告埋点 |
| 重定向 | 把请求跳到另一个 URL(如线上→测试) |
| 本地文件 | 用设备上的文件内容作为响应返回 |
多条件之间是「并且」。需要「或者」时,再建一条同样动作的规则即可。想做更复杂的组合(多动作、括号、正则),点编辑页右上角切到专家模式。
4重写规则 · 专家语法(DSL)
专家模式直接写规则语句,能力最全。动作里第一个符号(^ 替换、~ 删除、@ 开头的整体动作)决定「做什么」,后面 @req.*/@rsp.* 决定「对哪里」,引号里是值。
务必使用英文半角引号
";中文全角引号 「」 会使规则静默失效。条件对象
| 对象 | 含义 | 示例 |
|---|---|---|
@req.host | 请求域名 | @req.host CONTAINS "example.com" |
@req.api | 请求路径 | @req.api BEGINSWITH "/api/v1" |
@req.url | 完整链接 | @req.url MATCHES ".*\.jpg(\?.*)?$" |
@req.query | 查询字符串 | @req.query CONTAINS "debug=1" |
@req.method | 请求方法 | @req.method == "POST" |
@req.port / @req.schema | 端口 / 协议 | @req.schema == "http" |
@req.header["名"] | 请求头 | @req.header["Content-Type"] CONTAINS "json" |
@req.bodyText | 请求正文 | @req.bodyText CONTAINS "vip" |
@rsp.header["名"] | 响应头 | @rsp.header["Content-Type"] CONTAINS "json" |
@rsp.bodyText | 响应正文 | @rsp.bodyText CONTAINS "false" |
@rsp.status / @rsp.statusLine | 状态码 / 状态行 | @rsp.status == "404" |
比较与逻辑
比较:== != > < >= <= CONTAINS BEGINSWITH ENDSWITH LIKE(通配 */?) MATCHES(正则,整体匹配) IN ANY/ALL/NONE。逻辑:&&(并且) ||(或者) !(取反),可用 () 分组。
执行动作
| 动作 | 说明 | 示例 |
|---|---|---|
^ | 替换/插入 | ^@req.header["X-Debug"] "1" |
~ | 删除 | ~@req.header["Authorization"] |
@mock | 直接返回自定义响应 | @mock "{\"ok\":true}" |
@reject* | 返回空内容(空/空图/空对象/空数组) | @reject-array |
@redirect | 重定向(可带 @301…@308) | @redirect 307 "https://test/x" |
@map-local | 用本地文件当响应 | @map-local "/共享目录/mock.json" |
@break | 中断请求 | @break |
例给某接口加调试头并把响应字段改成 true
条件:@req.host CONTAINS "api.example.com" && @req.api BEGINSWITH "/feature" 动作1:^@req.header["X-Debug"] "1" 动作2:^@rsp.bodyText "\"enabled\":false" "\"enabled\":true"
常见问题
重写规则什么时候生效?
规则需要保存并启用,全局 Rewrite 开关也必须开启;验证时请重新发起请求。
不会写 DSL 可以改包吗?
可以。简单模式用条件和意图卡片生成规则;专家模式保留 DSL 供复杂逻辑使用。
能直接返回 Mock 响应吗?
可以。Mock 响应动作可跳过真实请求并返回自定义内容,Map Local 则可用设备上的文件作为响应。