无界面模式
让 Proxyman 在没有窗口、程序坞图标和对话框的情况下运行,使 AI 智能体和脚本可通过 MCP 抓取并解密 HTTPS。适用于 Proxyman 26.6.0 或更高版本。
无界面模式(Headless)让 Proxyman 在没有窗口、没有程序坞或菜单栏图标、也没有对话框的情况下运行。你的 AI 智能体(如 Claude Code、Codex 或 Cursor)可以通过 MCP 自行启动 Proxyman、抓取并解密 HTTPS、读取流量并创建调试规则。它的用法类似 mitmproxy,并且支持 Proxyman 的所有工具。
无界面模式适用于 Proxyman 26.6.0 或更高版本。与 Proxyman MCP 的其他功能一样,它需要付费的 Proxyman 许可证。
Claude Code 以无界面模式启动 Proxyman,无需对话框即可创建证书,通过 127.0.0.1:9090 发送 HTTPS 请求并读取已解密的请求记录。全程不会打开 Proxyman 窗口。
1. 设置
在命令末尾加上 --headless,将 Proxyman MCP 添加到你的智能体。
Claude Code
claude mcp add proxyman --transport stdio -- "/Applications/Proxyman.app/Contents/MacOS/mcp-server" --headless
Codex
codex mcp add proxyman -- "/Applications/Proxyman.app/Contents/MacOS/mcp-server" --headless
Cursor 和其他 MCP 客户端
{
"mcpServers": {
"proxyman": {
"command": "/Applications/Proxyman.app/Contents/MacOS/mcp-server",
"args": ["--headless"]
}
}
}
Setapp 版本请使用 /Applications/Setapp/Proxyman.app/Contents/MacOS/mcp-server。
这样就完成了。你无需打开 Proxyman,也无需开启 Settings → MCP:首次调用工具时会以无界面模式启动 Proxyman,智能体完成工作后 Proxyman 会自动退出。
已经添加了不带 --headless 的 Proxyman MCP?请让智能体“以无界面模式启动 Proxyman”,它会调用 open_proxyman 并传入 headless: true。
2. 无需对话框即可抓取 HTTPS
例如,你可以这样对智能体说:
以无界面模式启动 Proxyman,无需对话框创建它的 CA,并解密 api.example.com。然后通过 127.0.0.1:9090 运行我的测试,告诉我哪些请求失败了。
智能体会按以下步骤操作:
- 启动 Proxyman: 调用
open_proxyman并传入headless: true。它会返回代理地址,默认为http://127.0.0.1:9090。 - 创建证书: 调用
install_certificate并传入mode: generate_only,会创建 Proxyman CA 并将其添加到登录钥匙串,但不设为信任,因此 macOS 不会弹出对话框。它会返回certificate_path(PEM 文件)和spki_sha256。 - 解密域名: 对
api.example.com或通配符(如*.example.com)调用enable_ssl_proxying。参阅 SSL Proxying。 - 发送流量: 每个客户端自行使用代理并信任该 CA(见下表)。
- 读取流量:
get_flows、filter_flows和get_flow_detail会返回已解密的请求和响应。
| 客户端 | 代理和证书 |
|---|---|
| curl | curl -x http://127.0.0.1:9090 --cacert <certificate_path> https://api.example.com |
| Node.js 22.21+ 或 24.5+ | HTTPS_PROXY=http://127.0.0.1:9090 NODE_USE_ENV_PROXY=1 NODE_EXTRA_CA_CERTS=<certificate_path> node app.js |
| Python(requests、httpx) | HTTPS_PROXY=http://127.0.0.1:9090 SSL_CERT_FILE=<certificate_path> REQUESTS_CA_BUNDLE=<certificate_path> python app.py |
| 任意 Shell 工具 | 在同一个 Shell 中运行 get_terminal_manual_command 返回的命令。它会为 Node.js、Python、Ruby 和 curl 设置代理和证书,也适用于旧版 Node.js。 |
| Chrome、Playwright、Puppeteer | --proxy-server=http://127.0.0.1:9090 --ignore-certificate-errors-spki-list=<spki_sha256> --user-data-dir=<temp folder>。没有 --user-data-dir 时,Chrome 会忽略 SPKI 列表。 |
| Firefox | 使用 firefox 调用 run_guided_setup(请先退出 Firefox)。参阅 Firefox。 |
| iOS Simulator | install_ios_simulator_certificate。参阅 iOS Simulator。 |
使用 curl 手动完成相同的步骤:
# 1. certificate_path from install_certificate or get_certificate_status
CA="$HOME/Library/Application Support/com.proxyman.NSProxy/app-data/proxyman-ca.pem"
# 2. Send an HTTPS request through Proxyman
curl -x http://127.0.0.1:9090 --cacert "$CA" https://httpbin.org/json
3. 无界面模式下有哪些变化
- 始终在记录。 Proxyman 不会更改 macOS 系统代理,因此只有你指向
127.0.0.1:9090的客户端才会被抓取。如需抓取所有应用,请让智能体调用set_system_proxy,或使用 Network Extension。 - 没有提示框或窗口。 原本会弹出的提示会改为输出到 stdout。Breakpoint 不会打开窗口:智能体通过
list_pending_breakpoints和resolve_breakpoint来处理。 - 所有 MCP 工具均可使用, 只有少数仅用于改变窗口显示内容的工具除外,例如
open_proxyman_screen和set_flow_filter。请改用get_flows或filter_flows进行过滤。 - 会话文件:
open_session_file会将会话、HAR 或日志文件作为智能体读取的会话打开,close_session_file则返回实时流量。 - Access Control 不会询问。 任何能访问代理端口的设备都可以使用它。如果只想接受这台 Mac,请让智能体通过
update_settings开启proxy.listen_on_localhost_only。参阅 Access Control。 - 随时显示窗口: 打开 Proxyman.app,或调用
open_proxyman并传入headless: false。已抓取的流量会保留。 - 同一时间只运行一个 Proxyman: 如果 Proxyman 已带窗口打开,MCP 会使用它,不会再启动第二个无界面实例。
4. 仍需你手动完成一次的操作
无界面模式绝不会显示对话框,因此以下步骤需要你亲自完成一次:
- Safari、使用 macOS 信任库的应用(URLSession)和 Go: 它们只接受已受信任的证书。请运行一次
install_certificate并传入mode: automatic,macOS 会要求输入密码。它会创建新的 CA,因此之后请重新完成上述各客户端的信任设置。 set_system_proxy: Helper Tool 首次使用时会要求输入密码。- Network Extension: macOS 会要求你允许一次。
- iPhone 或 Android 真机: 在设备上安装并信任证书。参阅在设备上调试。
5. 在 Shell 或 CI 中运行
你也可以不借助智能体,直接启动无界面的 Proxyman:
/Applications/Proxyman.app/Contents/MacOS/Proxyman --headless &
它会在 stdout 输出状态信息,一直运行到你按下 Ctrl+C 或执行 kill <pid>。你可以使用 proxyman-cli 与它配合,例如导出已抓取的流量:
proxyman-cli export-log -m all -f har -o session.har
不要使用 open -a Proxyman --args --headless 启动。如果 Proxyman 已在运行,macOS 会丢弃该参数并显示窗口。