ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Fiddler 看不到 Claude Code 提示词?Filters、HTTP_PROXY 和 TaoToken 通道一起查

Fiddler 看不到 Claude Code 提示词?Filters、HTTP_PROXY 和 TaoToken 通道一起查 Claude Code 里 CLAUDE.md、自定义 Skill、settings.json 里的 Deny/Allow 规则都写齐了模型表现还是不对——这时候你真正想知道的只有一件事它到底收到了什么。ccdump 一启动就报找不到 Claude Codeclaude-trace 又只在 Linux 上跑得顺Charles 免费版抓到 30 分钟就断绕一圈还是回到 Fiddler Classic在 Inspectors 的请求体里看模型收到的原始内容。差别在凭证这一步Claude Code 指向哪条通道得先去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 建一把 Key再把 Base URL 填成 https://taotoken.net/api 。TaoToken 在这里只负责给 Key 和统一入口解密、过滤、看请求体全是 Fiddler 自己的工作。1. ccdump 和 claude-trace 都栽了为什么还是回到 Fiddler Classic1.1 三个抓包方案的现实门槛先说清楚为什么不用别的工具。ccdump 的思路听起来最省事直接把 Claude Code 的请求 dump 出来。但它启动时要能定位到 Claude Code 的安装路径版本一更新、安装方式一变npm 全局装还是原生安装包就可能直接报找不到 Claude Code脚本还没跑起来就结束了。claude-trace 的能力不错可惜主要在 Linux 上验证和维护Windows 上要么跑不起来要么行为对不上而 Windows 恰恰是很多人写 Claude Code 的环境PowerShell 一开、VS Code 一挂这才是日常。Charles 是另一条路界面友好、抓 HTTPS 也成熟但免费版一次只能抓 30 分钟就断排障最怕的就是抓一半断了——你以为请求没发出去其实只是录制窗口关了。Fiddler Classic 的优势很朴素Windows 上装完就能用HTTPS 解密流程成熟过滤器能精确到主机名抓包结果可以存成 .saz 慢慢翻。你要的不是花哨的可视化而是「这一轮请求的 body 到底长什么样」。1.2 这次要回答的两个问题很多人卡住不是因为不会用 Fiddler而是不知道该看什么。这次抓包其实只回答两个问题。第一个问题是通道Claude Code 这一轮请求到底发去了哪里。如果凭证还指向别的地方你在 Fiddler 里过滤半天也看不到期望的请求误判成「Claude Code 没发请求」。第二个问题是内容Skill 的正文、CLAUDE.md、Deny/Allow 影响下的工具调用是不是真的进了请求体。UI 上显示「已加载」「已生效」是一回事进入模型上下文的字符串又是另一回事。这两个问题分开验证排障才不会绕圈。通道的问题在 Headers 里看 Host 和路径内容的问题在 TextView 里搜关键字。2. Fiddler 解 HTTPSTrust Root Certificate 这一步不能跳2.1 Tools → Options → HTTPS 里的两个勾打开 Fiddler Classic进Tools→Options→HTTPS标签页。这里有三个动作要做顺序别乱。先勾上Capture HTTPS CONNECTs再勾上Decrypt HTTPS traffic。这两项决定了 Fiddler 会不会把你终端里发出去的 TLS 流量解开。只勾第一项的话你只能看到一条CONNECT taotoken.net:443的隧道记录请求体是空的——这是后面「抓到了但看不到内容」最常见的原因。接着点Actions按钮选Trust Root Certificate。Windows 会弹一个证书安装确认一路确认即可。这一步的本质是把 Fiddler 自己的根证书装进系统的受信任根证书区不装的话 Claude Code 发出的 HTTPS 请求会因为证书校验失败而直接中断你会看到连接错误而不是请求体。提示如果你的机器上装过其他抓包工具的根证书注意别把它们的 CA 混在一起排查。证书链的问题会伪装成「网络不稳定」。2.2 端口 8888 与 Capturing 状态Options→Connections里能看到 Fiddler 监听的端口默认就是8888。这个端口要和稍后 PowerShell 里设的代理地址完全一致写错了就是白抓。主界面左下角有一个Capturing状态字。它是跟着会话走的不是跟软件走的——如果你在排查过程中手滑按了F12抓包会暂停而界面上没有明显的红色警告很容易以为请求没发出去。养成习惯每次回到 Claude Code 发消息之前先瞄一眼左下角是不是还在 Capturing。另外8888 这个端口有可能被别的本地服务占用。Fiddler 启动时如果报端口冲突换一个端口并在代理变量里同步改掉别一边用 8888 一边用 8889 地混着设。3. User Filters 只留 TaoToken 的请求域名3.1 Show only the following hosts 填什么配置完 HTTPS切到Filters标签页。这里的设置决定了你在左侧会话列表里看到的是不是有效信息——不做过滤的话VS Code 的插件更新、系统遥测、浏览器后台请求会一起涌进来想找 Claude Code 那一条得翻半天。勾上Use Filters然后在Hosts一栏选择Show only the following Hosts框里填taotoken.net这一步和原文的差异就在这里。原文的 Claude Code 走的是另一套 endpoint所以过滤器里填的是火山引擎那串域名你现在把 Claude Code 的请求指向了统一入口主机名就变成taotoken.net。填的时候只写主机名不要带https://、不要带路径也不要顺手把带 UTM 的官网地址粘进去——过滤框认的是主机不是完整 URL。3.2 Run Filterset now 与 Hide CONNECTs 的取舍填完主机名点Actions→Run Filterset now让过滤器立刻生效而不是等下一轮。如果你用的是较新版本的 Fiddler可以在规则里顺手勾上Hide CONNECTs把 TLS 隧道记录藏掉列表会干净很多。但要注意一个坑当你什么请求都看不到的时候第一件事应该是把Hide CONNECTs取消掉看看是不是只剩隧道记录——如果连隧道都看不到那问题在代理变量或者端口不在过滤器如果只剩隧道、没有解密后的请求那问题在证书。这两条线的判断依据完全不同别混着猜。4. PowerShell 里挂 HTTP_PROXY / HTTPS_PROXY让 Claude Code 走 88884.1 会话级变量怎么设Fiddler 只是个监听器它不会自动接管你的终端流量。要让 Claude Code 的请求经过 8888得在当前 PowerShell 会话里显式设置代理变量$env:HTTP_PROXY http://127.0.0.1:8888 $env:HTTPS_PROXY http://127.0.0.1:8888 $env:NO_PROXY localhost,127.0.0.1设完之后在同一个窗口里启动 Claude Code。这是最容易踩的坑很多人在一个窗口设变量在另一个已经开着的窗口里跑命令那个窗口的环境变量早就在启动时固定下来了代理自然不会生效。如果你更习惯set HTTP_PROXY...这种 cmd 写法注意 cmd 的变量只在当前 cmd 会话有效且大小写变体和 PowerShell 不共享。跨窗口、跨终端的时候只认你当前进程的环境。4.2 大小写、NO_PROXY 和收尾清理Node 生态对代理变量的读取有时候同时对大小写敏感稳妥的做法是两个大小写都设一遍$env:http_proxy http://127.0.0.1:8888 $env:https_proxy http://127.0.0.1:8888NO_PROXY建议把localhost和127.0.0.1排除掉理由很实际Fiddler 自己、以及你本地跑的一些服务不应该被自己的代理绕一圈否则会出现「代理转发给自己」的诡异循环。抓包结束之后记得清理变量不要让它一直挂在你日常的终端里Remove-Item Env:HTTP_PROXY Remove-Item Env:HTTPS_PROXY Remove-Item Env:NO_PROXY长期挂着代理变量的后果是哪天你关掉 FiddlerClaude Code 会开始连不上然后你又要花半小时怀疑网络。5. Claude Code 的凭证这一步settings.json 指到 TaoToken 通道5.1 先去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 建 Key通道和凭证是两件事Fiddler 管的是「路过哪里」凭证管的是「以什么身份发出去」。凭证这一步打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册并创建 API KeyKey 用占位符YOUR_API_KEY表示别把它明文贴进任何要分享的截图里——抓包文件里也会带上它。创建完成后顺手在模型广场确认一下当前可用的模型 ID。这一步别凭记忆写模型列表会更新写错 ID 的后果是请求发得出去、但被上游拒绝看起来像通道坏了其实是模型名不对。5.2 ~/.claude/settings.json 的 env 三件套Claude Code 读取的配置里最省事的方式是在用户级settings.json的env字段里固定下来{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: 填模型广场里的模型 ID } }Windows 上的路径通常是C:\Users\你的用户名\.claude\settings.jsonmacOS / Linux 是~/.claude/settings.json。如果你的项目里还有一份项目级.claude/settings.json注意项目级会覆盖用户级的同名项排障的时候先确认当前生效的是哪一份。不方便改文件的话也可以在 PowerShell 会话里临时设$env:ANTHROPIC_BASE_URL https://taotoken.net/api $env:ANTHROPIC_AUTH_TOKEN YOUR_API_KEY $env:ANTHROPIC_MODEL 模型广场里的模型 ID会话级变量适合一次性验证长期写代码还是写进settings.json更省心。5.3 Base URL 写 https://taotoken.net/api末尾不要 /v1这一条单独拎出来说填进工具的地址是https://taotoken.net/api末尾不带/v1。客户端自己会拼路径你再手动补一层请求就会变成重复的段返回的错误看起来和凭证无关实际是路径错了。同时注意别把官网落地页地址填进ANTHROPIC_BASE_URL带 UTM 的那串是给人点的注册、创建 Key、看用量都在那边填进配置文件的一定是接口地址。这两个混用是新手最常见的错。6. 回到 Claude Code 发一条消息在 Inspectors 请求体里逐条比对6.1 Headers 先确认打到了哪条通道配置都落地之后回到 Claude Code 发一条最简单的消息比如让它复述一下当前项目里某个 Skill 的名字。然后切回 Fiddler在左侧列表里找那条POST请求。双击它右侧出现Inspectors。先看Headers确认 Host 是你过滤的那个主机名路径以/api开头请求方法通常是 POST。这一步确认的是「通道走对了」——如果 Headers 里的 Host 还是别的地方说明settings.json没生效或者当前终端读的是旧的环境变量。6.2 TextView 里搜 Skill 名和 Deny 规则确认通道之后切到Inspectors的TextView标签。Claude Code 的请求体是一段 JSON结构大致长这样{ model: 模型 ID, system: [ { type: text, text: 这里通常是 Skill 说明、CLAUDE.md 等拼接内容 } ], messages: [ { role: user, content: ... } ], tools: [ ... ], stream: true }在TextView里按CtrlF分三轮搜第一轮搜你自定义 Skill 的名字或其中一句独有的说明文字。搜到了说明 Skill 确实被拼进了上下文搜不到就要回去检查 Skill 文件放在项目级还是用户级目录、frontmatter 的name和description是否写全。第二轮搜 CLAUDE.md 里的一句独有表述。它一般也会出现在system里位置和 Skill 挨着。第三轮看 Deny/Allow 规则。规则本身不一定作为文本出现它更多体现在工具调用那几轮被拦下的操作会在后续请求里以拒绝结果的形式回填。所以你搜的时候与其搜规则字符串不如搜操作关键字看那个操作有没有真的被送给模型、以及模型的调用请求有没有被拦。提示请求体里包含你的完整提示词和可能的代码片段抓包存出来的 .saz 文件别随手发人。要贴给同事排查先把 body 里的敏感路径和 Key 抹掉。7. 抓不到、看不到、看不清三条排障线7.1 过滤后的列表空空如也一条请求都没有先别怀疑 Claude Code。按这个顺序过一遍Capturing 是不是还开着代理变量是不是设在启动 Claude Code 的那个窗口里端口是不是 8888 且没被占用过滤器的主机名是不是写成了taotoken.net而不是别的。如果这些都确认了还是空白把Hide CONNECTs取消掉再发一条消息。能看到隧道记录说明流量确实过来了问题在解密连隧道都没有说明流量根本没进 Fiddler回到代理变量那条线查。7.2 有会话但请求体是二进制乱码隧道有、解密后的请求也在但TextView里是乱码通常有两个原因。一是Trust Root Certificate没装成功或者装到了别的证书存储区去看看系统的受信任根证书里有没有 Fiddler 的条目。二是客户端本身对证书链做了额外校验这时候换一个请求路径验证一下比如先用模型对话发一条能区分是全局问题还是某条链路的问题。顺带说一句如果 Key 本身无效你会看到认证类的错误码返回而不是乱码。这两类现象别混在一起猜乱码是解密问题401 一类的错误是凭证问题凭证问题就回 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 重新建一把 Key 再试。7.3 请求体有了提示词却不全这种情况最费时间因为通道和证书都没问题纯粹是内容没进上下文。常见的三个原因Skill 文件位置放错项目级和用户级目录的生效范围不同改完文件没有重开会话旧会话里还是老的上下文Deny/Allow 规则写在了一份不生效的settings.json里或者当前工作目录不是你以为的那个项目根。判断方法很直接在请求体里搜一个你刚刚改过的、独一无二的句子。搜得到说明加载链路通了模型表现不符预期就是提示词本身要调搜不到问题是加载不是模型。8. 这次调用对得上之后再去控制台确认一遍抓到请求、能展开出完整提示词就说明 Key 与 Base URL 已经配通、通道也走对了。接下来做两件收尾的事。先用同一把 Key 在 TaoToken 模型对话 里发一条测试消息确认模型 ID 和 Base URL 没填错。这一步和 Fiddler 的抓包结果互为交叉验证两边都通说明问题不在链路上。如果是长期在 Claude Code 里写代码可以看看 Coding Plan 的额度是否够用Key 的创建和管理在 控制台 API Keys环境变量和settings.json的完整对照见 Claude Code 接入文档。更多模型和用量信息从 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 进去看。抓包本身不会让模型变聪明它只是把「你以为发出去了」变成「你确认发出去了」。把通道、凭证、上下文这三样对齐Claude Code 的行为才有可复现的解释。
返回列表