找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2628

积分

0

好友

370

主题
发表于 2 小时前 | 查看: 2| 回复: 0

最近在使用 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

启动后,终端会输出类似以下信息:
mitmproxy 启动日志,显示代理监听在端口 7890 和 Web 界面在 127.0.0.1:8081

这里需要注意两个端口:

  • 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_PROXYHTTPS_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 请求了。
mitmproxy 捕获到的网络请求列表,包含多个 Anthropic API 请求

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

分析请求与响应数据

接下来,我们在 Claude Code 中随便发送一条消息,例如“你好”。
Claude Code 聊天界面,用户输入‘你好’,模型回复自我介绍

此时,在 mitmproxy 的请求列表中找到对应的 POST 请求,点击即可查看详细信息。在 Request 标签页下,可以查看到完整的请求头信息。
HTTP 请求头详情,包含方法、URL、主机、认证信息等

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

同时,我们也可以在 Response 标签页下,查看模型返回的原始流式响应数据,这有助于理解大模型的输出机制。
服务器返回的流式响应原始数据,展示消息块和文本增量

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




上一篇:产品纹理设计核心原则与CMF实战指南:提升产品品质感
下一篇:Wine 11.0稳定版发布,Linux游戏性能再突破,直追Windows
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 21:38 , Processed in 0.232590 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表