ProxyPin 请求阻塞:三步指南,快速摆脱广告与跟踪请求干扰
【免费下载链接】network_proxy_flutterOpen source free capture HTTP(S) traffic software ProxyPin, supporting full platform systems项目地址: https://gitcode.com/GitHub_Trending/ne/network_proxy_flutter
ProxyPin 是一款开源免费的全平台抓包工具,它的请求阻塞(请求拦截)功能能按 URL 匹配流量,把不想要的请求直接拦下,不让其发出或呈现。读完本指南,你会写自己的拦截规则,用于屏蔽应用的广告跟踪请求、拦截隐私数据上报,还能在调试时保持抓包列表干净。
快速上手:30 秒配出第一条拦截规则
先看效果,再懂原理。以桌面端为例:
- 打开 ProxyPin 的设置页,点击「请求屏蔽」,弹出规则面板。
- 确认面板顶部的「启用」开关是打开的,这是总开关,关闭后所有规则都不生效。
- 点右上角「添加」,在 URL 输入框里填一条模式,比如
*.beacon.example.com/*,拦截类型选「屏蔽请求」,勾选启用后保存。 - 回到主界面触发一次对应请求,你会发现它不再出现在请求列表里。
原理一句话就能说清:ProxyPin 在代理链路上按顺序拿每条规则去比对请求的 URL,命中就拦下并记录日志,目标服务器根本收不到这个请求。
所有规则以 JSON 格式写在本地的request_block.json配置文件中,重启应用后依然有效。这份读写的逻辑在 lib/network/components/manager/request_block_manager.dart 里,想看细节可以直接翻源码。
通配符规则怎么写不翻车
你填的 URL 不会被逐字使用。系统会先做一步机械转换:把规则里的所有*替换成正则通配符.*,然后对「域名 + 路径」做部分匹配——只要 URL 里有一段命中就算命中。
| 规则写法 | 匹配目标 | 等价正则(转换后) |
|---|---|---|
*.beacon.example.com/* | beacon.example.com 及其子域名的全部请求 | .*.beacon.example.com/.* |
/api/v2/export/* | 任意域名下 v2 导出接口的所有路径 | /api/v2/export/.* |
*collect*.adnet.com* | 某广告网络的采集类链接及全部子路径 | .*collect.*.adnet.com.* |
记住两点就不会翻车:
*可以出现任意多次,写得越多匹配面越宽,*单独一条等于拦下所有请求。- 除
*外没有其他特殊字符,规则里的普通问号、斜杠都按字面匹配。
拦截类型分两种:屏蔽请求(blockRequest)在请求发出前拦下,服务器收不到;屏蔽响应(blockResponse)放行请求,收到响应后再丢弃。「不想让它发出去」选前者,「只是不想看返回内容」选后者。一条规则落盘后大致长这样:{"url":"*.beacon.example.com/*","type":"blockRequest","enabled":true}
三个实战场景:从广告噪声到调试降噪
场景一:屏蔽广告跟踪请求
- 现象:抓包某个应用时,列表被 beacon、adtrack 之类的埋点请求刷屏,真正的业务请求淹没其中。
- 操作:先看一眼请求列表,把跟踪域名抄下来,添加
*.该域名/*规则,类型选屏蔽请求。 - 验证:刷新页面触发流量,这类请求不再出现在列表,日志里能看到对应的屏蔽记录。
场景二:拦截隐私数据上报
- 现象:第三方 SDK 静默上报设备和行为数据,你希望设备压根别发出去。
- 操作:定位 SDK 的上报域名后添加屏蔽请求规则;若请求必须发出、只是不想看返回内容,则改用屏蔽响应。
- 验证:抓包屏上该域名的请求彻底消失,确认设备真的「闭嘴」了。
场景三:调试时丢弃脏请求
- 现象:前端频繁迭代,轮询、自动重试等请求不断刷新列表,干扰断点调试。
- 操作:临时添加一条路径规则(如
/api/poll/*)屏蔽该接口,调试结束后删除或停用这条规则。 - 验证:列表只剩你关心的请求,重放和断点操作都清爽了。
桌面 vs 移动:两端入口差异一张表看懂
| 对比项 | 桌面端 | 移动端 |
|---|---|---|
| 入口位置 | 设置页的「请求屏蔽」弹窗 | 左侧抽屉菜单中的「请求屏蔽」 |
| 新增/编辑 | 点右上角「添加」,或双击某条规则 | 点右上角「添加」,或轻点某条规则 |
| 快捷操作 | 在规则行上右键,弹出编辑/启停/删除 | 长按规则行,底部菜单弹出 |
| 配置写入时机 | 关闭规则弹窗时统一落盘 | 每次开关切换后立即落盘 |
两端共用同一套规则,底层都是那份request_block.json。移动端界面的实现可以看 lib/ui/mobile/setting/request_block.dart。
避坑清单:规则没生效先查这里
交付或换设备前,按序自查一遍:
- 两个开关都查:面板顶部的总开关和规则行上的启用开关,缺一不可。
- 类型别选错:屏蔽请求和屏蔽响应互相独立,选错了规则永远命中不了。
- 匹配对象记牢:参与匹配的是「域名 + 路径」,把 URL 里
?后面的查询串写进规则,大概率匹配不上。 - 警惕贪婪匹配:
*.com*这种规则宽到能拦下半个互联网,优先写具体的域名或路径。 - 控制规则数量:每个请求都要依次比对所有规则,日常几十条足够,同域名的多条规则尽量合并成一条。
- 桌面端注意保存时机:关闭规则弹窗时才会写配置,改完别立刻强退应用。
进阶组合:拦截只是起点
玩熟拦截后,可以和其他功能联动:
- 搭配请求重写:重写负责「改完再发」——重定向、替换请求或响应体;拦截负责「不让它发」。两者配合,一个管堵、一个管改,覆盖大部分流量操纵需求。
- 搭配 Hosts:在 Hosts 设置里把整个域名指到本地地址,属于域名级的硬屏蔽;拦截规则粒度更细,能只拦某个路径,两者互补。
- 搭配脚本:需要复杂判断时(例如只在参数包含某个值时才拦),写一段 JavaScript 脚本处理,比纯 URL 通配灵活得多。
一句话收尾:请求阻塞本身很简单,一条通配符规则就能决定流量「发不发、看不看」,真正好玩的在与重写、Hosts、脚本的组合拳。
延伸阅读:
- README.md:功能全貌与下载渠道
- test/:抓包与拦截相关的测试用例
【免费下载链接】network_proxy_flutterOpen source free capture HTTP(S) traffic software ProxyPin, supporting full platform systems项目地址: https://gitcode.com/GitHub_Trending/ne/network_proxy_flutter
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考