Proxyman
> Proxyman — 一款macOS上颜值与实力并存的HTTP/HTTPS抓包调试工具,让网络请求无处遁形。
如果你是个前端、移动端或者后端开发者,大概率都经历过这种绝望:App突然崩了、接口返回不对、某个请求莫名其妙超时,但你根本不知道发生了什么。这时候就需要一个能“偷看”网络流量的工具。Windows上有Fiddler、Charles,Linux上有mitmproxy,那macOS用户呢?
Charles当然能用,但那个Java Swing的界面和每年续费的授权,说实话有点劝退。直到我遇到了 Proxyman,一个原生macOS应用,Swift写的,界面清爽得像macOS自带的App,而且功能一点都不少。
## 这玩意儿到底是干啥的?
简单说,Proxyman 就是一个本地代理服务器。你把它跑起来,然后把你的浏览器、手机模拟器、甚至真机代理到它上面,它就能拦截、查看、修改所有经过的HTTP/HTTPS请求和响应。
它能帮你:
- 调试API接口,看请求头、响应体、状态码
- 模拟慢网速、断网等极端情况
- 重定向请求到本地或测试环境
- 修改请求或响应数据,测试边界情况
- 查看WebSocket、gRPC等现代协议流量
说白了,就是开发者的“网络显微镜”。
## 下载方式
别去百度搜那些乱七八糟的下载站,直接去官网:
[Proxyman官网](https://proxyman.io)
目前支持macOS和iOS(iOS版是配套的远程抓包工具)。macOS版有免费版和付费版,免费版功能已经非常够用,付费版主要解锁高级功能比如脚本自动化、团队共享等。
## 安装方法
下载下来是一个.dmg文件,打开后把Proxyman拖进Applications文件夹就行。首次启动会弹窗要求安装证书(为了抓HTTPS包),一路允许就行。
安装证书这一步千万别跳过,否则只能看到加密的乱码。具体步骤:
1. 启动Proxyman后,菜单栏点击 `Proxyman` -> `Install Certificate on macOS`
2. 系统会弹出钥匙串访问,找到Proxyman的证书,双击打开
3. 展开“信任”选项,把“使用此证书时”改为“始终信任”
4. 输入密码确认
搞定。这时候你打开浏览器随便访问个HTTPS网站,Proxyman里应该就能看到明文请求了。
## 基础使用教程
### 抓取浏览器流量
这是最常用的场景。Proxyman默认监听 `localhost:9090`,启动后自动配置系统代理。你什么都不用做,打开Chrome或Safari访问任何网站,左边列表就会刷刷刷出现请求。
界面分三栏:
- 左侧:请求列表,按时间顺序排列
- 中间:选中请求的详情(Headers、Query、Body)
- 右侧:响应详情(Status、Headers、Body)
你可以用顶部的搜索框过滤URL,或者用颜色标记区分不同域名。
### 抓取手机App流量
这个稍微麻烦点,但也很简单:
1. 确保手机和电脑在同一个Wi-Fi网络
2. Proxyman里打开 `Certificate` -> `Install Certificate on iOS`,会生成一个二维码
3. 手机扫描二维码下载描述文件,安装后进入 `设置` -> `通用` -> `关于本机` -> `证书信任设置`,打开Proxyman的开关
4. 手机Wi-Fi设置里配置HTTP代理,填你电脑的IP和端口9090
这时候手机上的所有网络请求就都出现在Proxyman里了。刷个抖音、打开个App,能看到它在请求什么接口、传了什么数据,非常爽。
### 修改请求/响应
这个功能太实用了。比如你想测试某个接口在返回错误码时App的UI表现:
1. 在请求列表里右键点击那个请求
2. 选择 `Breakpoints` -> `Response`
3. 再次发送请求,Proxyman会拦截响应
4. 在弹出窗口里修改响应体,比如把 `"status": 200` 改成 `"status": 500`
5. 点击 `Execute` 放行
App那边就会收到你修改后的数据。用这个来测试各种边界情况,比写Mock代码快多了。
### 模拟慢网速
开发时经常要模拟弱网环境。Proxyman里点 `Tools` -> `Throttle Settings`,可以设置上传/下载速度、延迟、丢包率。
比如设成 3G 网络(几百Kbps),然后刷新你的页面,看看加载体验。很多性能问题就是这样暴露出来的。
## 进阶技巧
### 使用脚本自动处理请求
Proxyman支持用JavaScript写脚本,在请求或响应到达时自动处理。比如我想把所有 `api.example.com` 的请求都加上一个自定义Header:
```javascript
// 在 Scripts 面板里添加一个 Response 脚本
if (url.includes('api.example.com')) {
$request.headers['X-Debug-Mode'] = 'true';
}
```
保存后,所有匹配的请求都会自动带上这个Header,不用手动一个个改。适合批量测试。
### 远程抓包(iOS真机)
如果你有iPhone或iPad,可以直接用Proxyman的iOS客户端配合macOS版实现远程抓包。在App Store搜 `Proxyman` 安装,然后扫码配对,手机上的流量会实时同步到电脑上。比用Charles连USB线方便多了。
### 使用Map Local/Remote
这个功能可以让你把某个请求重定向到本地文件或另一个URL。比如你在调试一个图片加载失败的问题,可以把线上图片URL映射到本地的一张测试图片:
- 右键请求 -> `Map Local` -> 选择本地图片文件
- 或者 `Map Remote` -> 输入另一个URL
之后所有指向原URL的请求都会被替换成你的本地文件。适合前端开发时替换CDN资源。
### 导出请求为cURL
在请求上右键,选择 `Copy as cURL`,就能生成一个完整的curl命令。这个在跟后端沟通时特别好用——直接把请求贴给他,他就能复现问题。
### 过滤与搜索
请求多了以后,左侧列表会非常乱。Proxyman的过滤功能很强:
- 在搜索框输入 `status:500` 只显示500错误
- 输入 `method:POST` 只看POST请求
- 输入 `domain:api.xxx.com` 只看某个域名
- 多个条件可以组合,比如 `domain:api status:4xx`
另外还能用颜色标记:右键域名 -> `Colorize`,把重要服务的请求标成红色,一目了然。
## 跟Charles比怎么样?
很多人纠结选Proxyman还是Charles。我的看法是:
- 如果你在用macOS,Proxyman更原生、更流畅、界面更好看
- Charles跨平台(Windows/Linux/macOS),但界面老旧
- Proxyman免费版功能已经很强,Charles免费版有30分钟限制
- 高级功能两者都有,但Proxyman的脚本系统更现代(基于JavaScript)
如果你主要用macOS开发,Proxyman几乎是首选。Windows用户还是乖乖用Fiddler或Charles吧。
## 最后说两句
抓包工具是开发者的瑞士军刀,Proxyman把这件事做得既强大又优雅。不管你是前端调试接口、后端排查问题、还是移动端分析网络性能,它都能帮你省下大把时间。
免费版已经足够日常使用,如果觉得好用,可以买个Pro版支持开发者(其实也不贵,几十美金买断)。比起Charles每年续费,Proxyman的定价良心多了。
如果你还没试过,赶紧去官网下载一个玩玩。相信我,你会爱上那种把网络流量玩弄于股掌之间的感觉。