最近在使用 Claude Code 这款命令行工具时,想要查看它向 API 发送的具体请求数据,特别是学习其背后的系统提示词。但因为它是一个在 shell 中运行的工具,直接查看内部通信并不方便。本文介绍一种使用 mitmproxy 进行网络抓包的方法来实现这一目标,类似的工具还有 Wireshark。
安装 mitmproxy
在 macOS 上,可以使用 Homebrew 进行安装:
brew install mitmproxy
安装完成后,有三种启动方式:
# 启动命令行交互界面 (不支持 Windows)
mitmproxy
# 启动图形化网页界面 (推荐新手)
mitmweb
# 启动不交互的纯命令行版本
mitmdump
这里我们选择使用 Web 图形界面方式,对新手更为友好,操作和查看起来也更直观。
启动 mitmproxy Web 界面
执行以下命令启动 mitmproxy 的 Web 版本,并指定代理监听端口为 7890:
mitmweb -p 7890
启动后,终端会输出类似以下信息:

这里需要注意两个端口:
- 7890:这是 HTTP 和 HTTPS 的代理端口,也是后续配置 Claude Code 使用的代理端口。
- 8081:这是 Web 管理界面的端口,可以在浏览器中打开进行可视化操作。
通常,浏览器会自动打开 http://127.0.0.1:8081,如果没有自动打开,请手动在浏览器地址栏输入该地址。
导入系统证书(关键步骤)
这是至关重要的一步,也是最容易出错的环节。为了让系统信任 mitmproxy 解密 HTTPS 流量,必须将其证书添加到系统的受信任根证书列表中。否则,后续将无法捕获到 HTTPS 协议的请求包。
mitmproxy 在首次启动时会自动生成证书,默认保存在以下路径:
~/.mitmproxy/mitmproxy-ca-cert.pem
在 macOS 系统上,需要执行以下命令将证书添加到系统钥匙串并设置为完全信任:
sudo security add-trusted-cert \
-d -r trustRoot \
-k /Library/Keychains/System.keychain \
~/.mitmproxy/mitmproxy-ca-cert.pem
添加完成后,可以运行以下命令验证证书是否已成功添加:
sudo security find-certificate -c mitmproxy
通过配置网络代理和安装可信证书来拦截分析流量,是网络调试和逆向工程中的常见手段。
启动 Claude Code 并通过代理抓包
本文以使用智谱 AI 的大模型接口为例,官方配置文档可参考:https://docs.bigmodel.cn/cn/coding-plan/tool/claude。
首先,需要配置 Claude Code 的 settings.json 文件。
修改或创建 ~/.claude/settings.json 文件。
除了官方文档中要求的配置外,必须将 HTTP_PROXY 和 HTTPS_PROXY 环境变量添加到配置中,指向我们启动的 mitmproxy 代理:
{
"env": {
"DISABLE_AUTOUPDATER": "0",
"ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthropic",
"ANTHROPIC_AUTH_TOKEN": "your_zhipu_api_key",
"HTTP_PROXY": "http://127.0.0.1:7890",
"HTTPS_PROXY": "http://127.0.0.1:7890",
"CLAUDE_DEBUG": "1",
"API_TIMEOUT_MS": "3000000"
}
}
由于 Node.js 运行时不完全信任系统的证书链,我们必须显式地指定刚才导入的 mitmproxy 证书。使用以下命令启动 Claude Code:
NODE_EXTRA_CA_CERTS=~/.mitmproxy/mitmproxy-ca-cert.pem claude
现在,所有从 Claude Code 发出的网络请求都会经过 mitmproxy,你可以在 mitmweb 的界面中看到捕获到的 HTTPS 请求了。

可以看到 Claude Code 发出了许多请求。为了方便查看,我们可以在界面顶部的过滤框中输入 ~d bigmodel,来筛选出只发送到智谱 API 域名的请求。

分析请求与响应数据
接下来,我们在 Claude Code 中随便发送一条消息,例如“你好”。

此时,在 mitmproxy 的请求列表中找到对应的 POST 请求,点击即可查看详细信息。在 Request 标签页下,可以查看到完整的请求头信息。

切换到 Response 或 Detail 视图下的 Request 部分,可以查看具体的请求体(JSON 格式)。这里就包含了我们想了解的系统提示词 (system 字段) 和用户消息。

同时,我们也可以在 Response 标签页下,查看模型返回的原始流式响应数据,这有助于理解大模型的输出机制。

通过以上步骤,我们就可以完整地捕获并分析 Claude Code 与后端 API 之间的通信,包括其使用的系统提示词、发送的消息结构以及接收的响应格式。这种方法对于学习大模型提示词工程、调试集成问题或进行简单的协议分析都很有帮助。在 云栈社区 的讨论区,你也可以找到更多关于安全分析与工具使用的深度分享。