动态注入:实时拦截手动改包
动态注入 vs 静态注入
动态注入和静态注入的核心区别是 时机:
- 静态注入:预设规则 → 自动匹配 → 自动修改 → 全程无人参与
- 动态注入:抓包运行中 → 请求到来 → 手动拦截 → 实时修改 → 手动放行
动态注入适合那种「我想看看这个请求到底发了什么,然后再决定改不改」的场景。
使用步骤
第一步:启动抓包
确保 httpCanary 正在抓包(纸飞机是红色的)。
第二步:开启动态注入
进入设置 → 注入器 → 找到「动态注入」开关并打开。开启后,动态注入面板会常驻在悬浮窗上或主界面中。
第三步:触发目标请求
在目标 App 中进行操作,触发你想拦截的那个网络请求。
第四步:请求被拦截
当目标请求到达时,动态注入会 暂停 这个请求——它不会被发送到服务器,而是停在 httpCanary 等待你的操作。
第五步:查看和修改
在动态注入界面中,你可以:
- 完整查看被拦截的请求(URL、Method、Headers、Body 都在)
- 修改任何你想改的字段——请求参数、Header、Body,全部可编辑
- 决定接下来怎么处理
第六步:放行或丢弃
修改完成后,三个选项:
- 放行(继续发送)——把修改后的请求发给服务器
- 丢弃——直接中止这个请求,客户端会收到连接失败的通知
- 原样放行(不修改)——什么都不改,直接让请求通过
动态注入的特点
只能同时拦截一个请求
和静态注入可以多个注入器并存不同,动态注入 同一时刻只能处理一个请求。如果同时有多个请求到来,后面的会排队等待前一个处理完。
不适合大体积数据
如果请求体或响应体很大(比如大文件上传下载),动态注入可能会超时——因为你手动处理需要时间,而网络连接有超时限制。大体积的场景用静态注入更合适。
需要快速操作
请求被拦截后,客户端那边的连接在等待。如果你改得太慢,客户端可能会超时自动放弃。建议提前想好要改什么,拦截后快速下手。
动态注入 vs 断点
动态注入和断点功能非常相似——都是拦截 + 查看 + 修改 + 放行。主要区别:
| 对比项 | 动态注入 | 断点 |
|---|---|---|
| 触发方式 | 设置里手动开启 | 设置里配置断点规则自动触发 |
| 匹配方式 | 手动控制什么时候开启 | 预设条件自动匹配 |
| 典型场景 | 临时拦截当前正在操作的请求 | 精确匹配某个特定类型的请求 |
| 超时风险 | 手动操作时间可能超时 | 同样有超时风险 |
实战场景
场景一:调试时临时改个参数
正在 App 里一步步操作调试,突然发现某个接口的参数不对——不想停下来去配静态注入规则,直接开动态注入,下次触发这个请求时就被拦住,快速改掉放行。
场景二:调试响应时手动重发
静态注入改完响应体后,想再看一次效果——但 App 的操作流程比较复杂不容易复现。开动态注入拦截重放的请求,手动放行到修改后的响应。
场景三:观察请求内容后再决定
不确定某个接口到底传了什么参数,先拦截看看。如果参数没问题,原样放行;如果确实需要改,再手动修改放行。