好的,没问题。下面是一份更详细的版本,我把每一步的操作、底层原理、以及我自己踩过的坑都拆开来讲,希望能帮你一次性搞懂背后的门道。

抓包抓到了什么:一次抓包数据的结构分析

我们先来看一次完整抓包的核心数据,这样看后面不蒙圈。抓包通常会捕获到发给 api.anthropic.comPOST /v1/messages 请求,其请求体一般长这样:

📦 请求体主要构成
  • system 数组:这部分实际展开后内容巨大,包含系统指令、技能列表、CLAUDE.md 项目规则和渐进式披露技巧等。
  • messages 数组:用于管理对话轮次。你的第一次提问在 role: “user” 中;而当 Claude 需要执行工具时,会发出一个 role: “assistant” 的工具调用指令(type: “tool_use”);你执行完工具后,需要把结果作为 role: “user” 的消息再发回去(type: “tool_result”),从而完成一次闭环。
  • tools 数组:这是 Claude 可以调用的全部外部功能。光是内置工具就有 26 个,明确归类在 8 个分组里。整个 tools 定义的纯文本大小能达到 96.6 KB,可见其内容之详细。
  • anthropic_version & beta 标记:用于告诉服务器使用特定的 API 版本,或启用还在测试中的能力。

看到这里,大家应该明白为什么一个简单查询背后会有如此庞大的数据量了。下面我们来逐个拆解四种实现方法。

序号 方法名称 难度 完整性 适用场景
1 调试日志 快速排查问题,本地开发首选
2 CC-Viewer 想要可视化界面的非抓包方案
3 Mitmproxy 最高 深度分析、确认工具调用细节、修改请求
4 SDK 拦截 自主开发 AI Agent 时的集成测试

一、内置日志:官方 Cli 自带调试模式

这是最简单、官方支持的方法,只需在命令后加 --debug 即可,例如:

claude --debug "把当前目录下所有 CSS 文件合并成一个"

这个命令的原理是:--debug 参数被 Claude Code 的 CLI 解析后,会设置一个内部环境变量。当 CLI 调用 Anthropic SDK 发起网络请求时,SDK 检测到这个变量就会自动在 stderr 中打印出发送和接收的原始数据包。整个过程无需任何第三方工具。

🚧 可能遇到的问题及排查

就像我前面提到的,这个命令在某些版本的 Windows 或特定环境下可能失效。建议按照以下流程排查:

  1. 检查安装:确保 Claude Code 是最新版,如果是 Windows 建议优先在 WSL 的 Ubuntu 环境中使用。
  2. 检查日志路径:如果 --debug 在终端没输出,日志可能已经写入内部文件了,可以尝试查看 %USERPROFILE%\.claude\ 下的 .jsonl 文件。
  3. 启用详细日志:一些旧版本可能需要配合 --verbose 参数使用。

二、CC-Viewer:命令行开始,网页内查看

如果你不想被终端的原始数据淹没,希望有一个美观的界面,可以用 cc-viewer。这个方法不影响你正常使用claude命令,非常方便。

安装与基础使用
  1. 首先通过 NPM 全局安装:npm install -g cc-viewer
  2. 安装后,直接在终端启动它:ccviewer。这一步要求机器上已安装并配置好 Claude Code。
  3. 启动成功后,浏览器会自动打开一个新标签页(通常是 http://localhost:3314/),展示 Claude Code 的所有历史会话记录。

它的内部原理其实是个本地 Web 服务器,启动后会扫描 Claude Code 在电脑上存储的会话文件,然后在它的界面上进行渲染展示。这就让你能优雅地回溯 Claude 之前所有工具调用和系统提示词。


三、Mitmproxy 抓包:看得最全的方案

Mitmproxy 是一个与平台无关的,纯命令行界面的抓包工具。

1. 技术原理:一个“合法”的中间人

HTTPS 是加密的,Mitmproxy 能做“中间人”的核心在于它替换了证书。当你信任了 Mitmproxy 自己生成的根证书后,它会为你访问的任意网站(如 api.anthropic.com)动态生成一个由它根证书签名的假证书。你的电脑认为这个假证书是合法的,所以连接成功。

这样一来,你和服务器之间的所有数据都会先经过 Mitmproxy,它在本地解密后,你就能看到明文了。然后它会用真实的 Anthropic 服务器证书(它自己的)再把数据加密发出去。你和服务器都以为在和对方直接通信,其实中间站了个“第三者”。

2. 完整操作步骤(以 Mac/Linux WSL 为例):
  • 第一步,安装与启动代理brew install mitmproxy 安装。之后,通过 mitmweb --listen-port 8080 启动,这会打开一个浏览器监控面板 http://localhost:8081
  • 第二步,配置 Claude Code 并安装证书:打开一个新终端,配置让它走代理:
    export HTTPS_PROXY=http://localhost:8080
    export NODE_EXTRA_CA_CERTS=~/.mitmproxy/mitmproxy-ca-cert.pem
    claude
    
  • 第三步,开始对话并查看:进入 Claude 会话后发送一个指令,比如 /请重构 utils.js。马上切回 mitmweb 界面,应该就能看到刚捕获的 POST /v1/messages 请求了。
3. 注意

NODE_EXTRA_CA_CERTS 环境变量是很多人配置失败的地方。Node.js 环境下的程序(如 Claude Code)不会自动使用操作系统的根证书。如果你不加这个配置指向 Mitmproxy 的证书,Node.js 的 TLS 层会发现证书不匹配,从而拒绝连接,Claude 会直接没反应。


四、SDK 直接调用者的请求拦截

这种方法比较定制,需要你直接编辑 Claude 的 CLI 核心文件 cli.js 来注入日志代码。

能找到这条路,本身就是通过对 cli.js 进行逆向工程的结果。当你在代码(如 Python)里使用 Anthropic SDK 时,如果不想--debug日志混在 stdout 里,可以这样操作:

import anthropic
import logging

# 启用库的 debug 日志
logging.basicConfig(level=logging.DEBUG)
logging.getLogger("anthropic").setLevel(logging.DEBUG)

client = anthropic.Anthropic()
# 你的正常调用代码
message = client.messages.create(...)

对于自己开发的 AI Agent,这样能精确控制日志输出格式,方便集成到自动化监控系统。


总结一下这四种方法

  • 最直接、最优雅的路径(非抓包):如果你只是想知道 Claude 收到了什么、回复了什么,官方 CLI 自带 --debug 基本够用。但在 Windows 上,你大概率需要配合 cc-viewer 工具来达到类似效果。
  • 抓包的必要性:如果你想知道 Claude Code 具体调用了哪个函数、传了什么参数,或者它在调用工具中间出了什么差错,只能用抓包来“看现场”。这需要你克服安装和配置代理的心理门槛。

写在最后

了解 Claude 的底层通信,是在为构建 AI Agent 核心机制铺路。这四种方法的每种选择,本质上都代表了不同的 “Agent-to-Cloud” 控制策略。当你能根据自己的需求(开发成本 vs. 观察深度)选择合适的工具时,你围绕 Agent 构建的工具链也就逐步成型了。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐