ProxyPin 抓包 5 步上手:真机调接口不再靠猜
【免费下载链接】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 是一款开源免费、支持 Windows、macOS、Linux、Android、iOS 全平台的抓包工具,它把真机流量直接转发到桌面端,让你看的是原始报文,而不是别人的转述。
一套工具,把桌面和真机放进同一个代理
ProxyPin 是一款基于 Flutter 开发的全平台 HTTP(S) 抓包工具,可以拦截、检查和重写流量,连 Flutter 应用自己的请求也抓得住。
它和你想的抓包工具有点不一样:
- 扫码连接——手机上不用手动配 Wi-Fi 代理,扫一下二维码就接进桌面端
- 域名过滤——只抓你关心的流量,别的应用不被干扰
- 脚本定制——用 JavaScript 改请求、改响应,不用动 App 代码
| 维度 | 传统抓包方式 | ProxyPin |
|---|---|---|
| 跨平台 | 每个系统装一套工具 | 一套工具五个系统 |
| 真机接入 | 手动配 Wi-Fi 代理,易被证书锁定挡住 | 扫码连接 + 内置 CA 证书 |
| 数据回溯 | 会话结束就丢 | 历史自动保存,支持 HAR 导入导出 |
| 改请求 | 改代码重新打包 | 请求重写、映射、脚本热更新 |
5 分钟从克隆到第一条流量
先拉代码:
git clone https://gitcode.com/GitHub_Trending/ne/network_proxy_flutter进入目录,装依赖:
flutter pub get启动桌面端(按你的系统选一个设备):
flutter run -d windows✅ 你应当看到:桌面主窗口打开,左侧是请求列表,右上角出现抓包入口,监听端口开始工作。
⚠️ 注意一:macOS 首次打开会提示不受信任的开发者,去"系统设置-隐私与安全性"允许即可,README_CN.md 里也专门标了这条。 ⚠️ 注意二:要抓 HTTPS 流量,先在设置里安装并信任 ProxyPin 的 CA 证书,否则解密不了,看到的只有密文。
浏览器随便打开一个站点,列表里出现第一条请求——点进去,请求头、请求体、响应体都在。
工作流 1:只抓你要的那条接口
你遇到的问题:抓包开着,列表却被广告、埋点、心跳刷得滚不完,想找的那条接口被淹没在几十条请求里。
在项目中怎么操作:桌面端启动抓包后,打开 lib/ui/desktop/setting/filter.dart 对应的"过滤"页签,把目标域名加进过滤规则;只保留该域名的流量,其余一律不拦截。然后请求列表里点中目标条目,逐栏查看 headers、body 和响应,状态码与耗时一目了然,WebSocket 和 SSE 的流式消息也能展开。
你看到了什么:列表只剩你在调的那个域名的请求,点开就能看到完整响应体,前后差异一眼可查。
如果不对怎么办:列表里根本没有目标域名时,先核对过滤规则写的是完整域名,再确认抓包已开启、CA 证书已信任——HTTPS 没装证书是解不出来的。
工作流 2:手机扫个码,真机流量流到桌面
你遇到的问题:问题只复现在手机上,传统做法是手动给手机 Wi-Fi 配代理、找电脑 IP、对端口,折腾一圈还可能被应用的证书锁定(App 只信任自己的服务器证书,拒绝你伪造的 CA)挡在门外。
在项目中怎么操作:桌面端启动抓包后,点工具栏的手机连接按钮(对应 lib/ui/desktop/toolbar/phone_connect.dart),界面上会生成一个二维码;手机装好 ProxyPin App 后扫这个码,手机流量就转发到桌面端,桌面主界面按时间线合并显示,可按设备筛选。
你看到了什么:手机上发出的每一个请求,原样出现在电脑屏幕的列表里,连真机特有的网络环境差异都被记录下来。
如果不对怎么办:扫码后列表一直空白,先确认手机和电脑在同一个 Wi-Fi 网段、防火墙放行了 ProxyPin 端口,再重新扫一次。
工作流 3:用 JavaScript 脚本改写请求
你遇到的问题:想验证不同 token 权限下的接口表现,传统做法是改 App 代码、重新打包、重新安装,一轮下来十分钟起步,而且每次都要重来。
在项目中怎么操作:打开 lib/ui/desktop/setting/script.dart 对应的"脚本"页面,新建一个请求拦截脚本,用 JavaScript 写onRequest钩子:
function onRequest(request) { if (request.url.includes('api.example.com')) { request.headers['Authorization'] = 'Bearer ' + tokenForTestCase; } return request; }保存并启用脚本,之后凡是命中的请求都会按脚本执行,列表里看到的就是改过的报文。
你看到了什么:请求头里的 Authorization 已经是你脚本里生成的值,响应随之变化,全程没动过一行 App 代码。
如果不对怎么办:脚本不生效时,先确认函数名就是钩子名(onRequest等),ProxyPin 走的是 JS 钩子模型,写错名字会被静默跳过。
踩坑前先看这里
- CA 证书没装对:HTTPS 会整片解密失败或 App 直接断网,别急,桌面端和手机端各自装一次、在系统里标记"信任"就好。
- 手机扫码后断流:大概率是防火墙没放行 ProxyPin 端口,临时放行后重扫一次。
- 脚本里写死 token:敏感值会被日志和 HAR 导出一起带走,换成从环境变量或本地配置注入。
- 过滤规则写太宽:
*一开,无关流量全抓进来,列表卡顿还找不着重点,只加你在调的域名。 - macOS 首次打开打不开:提示"不受信任的开发者"是正常现象,去系统设置里允许,不是装坏了。
下一步
去 Issues 列表翻一遍,看看你遇到的问题是不是已经有人踩过,顺便提个自己的;完整特性清单和下载渠道见 README_CN.md。下次真机日志再翻车,你不用再等后端同学回消息了——打开 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
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考