1. Windows 下 Claude Code 报 Unable to connect to Anthropic services 到底卡在哪
如果你在 Windows 上装好 Claude Code,敲下第一条命令就撞上Unable to connect to Anthropic services,紧接着还有一行Failed to connect to api.anthropic.com: ERR_BAD_REQUEST,那你不是一个人。这个报错的核心含义其实很直白:Claude Code 这个客户端在启动时,尝试去连它默认写死的 Anthropic 服务地址api.anthropic.com,但这次连接在请求层面就被判定为失败,于是它干脆告诉你「连不上 Anthropic 服务」。
很多人第一反应是网络问题,于是反复重装、换终端、重启电脑,结果报错一字不变。原因在于 Claude Code 的连接目标是由配置里的 Base URL 决定的,只要这个地址还指向默认的api.anthropic.com,而你的环境又没法正常访问它,那ERR_BAD_REQUEST就会稳定复现。换句话说,问题不在「你有没有网」,而在「它连的那个地址对不对、Key 有没有配上」。
这篇就按排障视角来写,适合两类人:一是刚在 Windows 上装完 Claude Code、被这个报错拦在门外的初学者;二是已经按网上教程改过.claude.json、但依然时好时坏的老用户。我会把 Base URL 怎么填、Key 怎么来、.claude.json里那个hasCompletedOnboarding到底管什么,一项一项拆开,让你拿到 Key 之后能对着报错逐条核对,而不是盲目复制命令。
需要先明确一个概念:Claude Code 是一个命令行里的编码助手,它本身不产生模型能力,能力来自它背后请求的 API 服务。所以「连不上」这件事,本质是「客户端配置的请求地址 + 鉴权信息」这套组合没打通。把这两样配对,报错自然消失。
2. 先把 TaoToken 的 Key 和 Base URL 准备好
排障的第一步不是改代码,而是先确认你有一个可用的请求入口和一把对应的 Key。这里用 TaoToken 来做这件事,它的作用就是给你一个统一的 API 入口,Claude Code 把请求发过去,由它来对接模型能力。你可以先打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 了解整体情况,注册登录之后进入控制台创建 Key。
创建 Key 的入口在 API Keys 页面,地址是 https://taotoken.net/api-keys ,登录后点新建,复制那串以sk-开头的字符串,先存到记事本里,后面配置要用。注意这串 Key 只在创建时完整显示一次,关掉页面就看不全了,所以务必当场复制。
Base URL 这一项要记牢,填的是https://taotoken.net/api,注意结尾没有多余的斜杠,也不要自己补/v1之类的东西。很多人ERR_BAD_REQUEST反复出现,就是因为 Base URL 多写或少写了一段路径,客户端拼出来的请求地址不对,服务端直接返回请求错误。
如果你后面打算长期在 Claude Code 里做编码、跑 Agent 任务,可以顺带看一下 Coding Plan 页面 https://taotoken.net/coding-plan ,它面向的就是这种持续编码场景。但排障阶段先不用管套餐,把 Key 和 Base URL 这两样拿到手就够了。
注意:Key 属于敏感凭证,不要贴到公开仓库、截图或聊天群里。配置时直接写进本地配置文件即可。
3. Claude Code 里 Base URL 与 Key 的可复制配置
拿到 Key 之后,进入正题:把 Claude Code 的请求地址从默认的api.anthropic.com改成 TaoToken 的入口。Claude Code 读取配置的方式和环境变量、配置文件都有关,Windows 下最稳妥的做法是同时把环境变量和配置文件都设对,避免它从某个角落读到旧值。
先设环境变量。打开 PowerShell,逐条执行下面两行,把sk-你的Key换成你刚复制的那串:
setx ANTHROPIC_BASE_URL "https://taotoken.net/api" setx ANTHROPIC_API_KEY "sk-你的Key"setx会把变量写进用户级环境变量,执行完当前窗口不会立刻生效,需要关掉 PowerShell 重新开一个,或者新开一个终端。这一步的作用是给 Claude Code 一个默认的请求地址和鉴权 Key,它启动时会优先读这些变量。
环境变量设完,再处理配置文件。Claude Code 在 Windows 下的用户级配置通常在%USERPROFILE%\.claude.json,也就是C:\Users\你的用户名\.claude.json。你可以先用记事本打开看看里面有没有hasCompletedOnboarding这个字段。如果没有,或者值为false,Claude Code 可能会在启动引导流程里卡住,表现之一就是连接异常。
补写这个字段可以用原文那段 PowerShell 命令,它做的事就是读取.claude.json、加上hasCompletedOnboarding: true、再写回去:
powershell -Command "$f='%USERPROFILE%\.claude.json';$j=Get-Content $f|ConvertFrom-Json;$j|Add-Member -NotePropertyName 'hasCompletedOnboarding' -NotePropertyValue $true -Force;$j|ConvertTo-Json|Set-Content $f"执行前建议先备份一份,命令是copy %USERPROFILE%\.claude.json %USERPROFILE%\.claude.json.bak,万一写坏了还能还原。这条命令只负责补引导状态,不负责改 Base URL,所以它和前面的环境变量是两件事,缺一不可。
为了让你对照清楚,把关键项列成表:
| 配置项 | 应填内容 | 常见错误 |
|---|---|---|
| Base URL | https://taotoken.net/api | 多写/v1、结尾带斜杠 |
| API Key | sk-开头的字符串 | 复制不全、带了空格 |
| 配置文件 | %USERPROFILE%\.claude.json | 路径写错、字段名拼错 |
| 引导字段 | hasCompletedOnboarding: true | 值为 false 或缺失 |
配置改完后,把之前开着的终端全部关掉,重新开一个 PowerShell,让新的环境变量生效。这一步别偷懒,很多「改了没用」的情况就是旧终端还在用旧变量。
4. 发一条验证请求,确认连接真的通了
配置对不对,不靠猜,发一条请求就知道。重新打开 PowerShell 后,先确认环境变量读到了:
echo $env:ANTHROPIC_BASE_URL echo $env:ANTHROPIC_API_KEY第一条应该输出https://taotoken.net/api,第二条输出你的 Key。如果第一条是空的,说明setx没生效或终端没重开,回到上一步重来。
确认无误后,启动 Claude Code,随便问一个简单问题,比如让它解释一段代码或写个函数。如果之前那个Unable to connect to Anthropic services不再出现,并且能正常返回内容,说明 Base URL 和 Key 这套组合已经打通。
你也可以用一条更直接的请求来验证入口是否可达。在 PowerShell 里执行:
curl.exe https://taotoken.net/api -H "Authorization: Bearer sk-你的Key"这条命令的作用是直接向 TaoToken 的 API 入口发一个带鉴权的请求。如果返回的是结构化的响应而不是连接错误,说明地址和 Key 都没问题,问题就只剩 Claude Code 客户端侧的配置了。反过来,如果这里就报错,那要回头检查 Key 是否复制完整、Base URL 是否写对。
验证通过后,你可以在模型对话页面 https://taotoken.net/models 里直观地试试不同模型的对话效果,确认返回质量符合预期。这一步不是必须,但能帮你建立「入口通了、模型也在正常工作」的信心。
5. 本篇常见错排查:ERR_BAD_REQUEST 反复出现怎么办
排障最怕的是改了一处、报错还在。下面按我实际遇到过的顺序,把ERR_BAD_REQUEST和连接失败的高频原因列一遍,你对着逐条核对。
第一类,Base URL 写错。这是最常见的一种。https://taotoken.net/api后面不要加/v1,不要加斜杠,也不要写成http。客户端会把 Base URL 和具体路径拼起来,多一段少一段都会让服务端返回请求错误。改完记得重开终端。
第二类,Key 没生效或复制不全。setx设的变量在新终端才生效,旧终端读的还是空值或旧值。另外从网页复制 Key 时容易带上首尾空格,配置里最好检查一遍。如果 Key 已经泄露或不确定是否完整,直接去 API Keys 页面重新建一个更省事。
第三类,.claude.json状态不对。hasCompletedOnboarding缺失或为false时,Claude Code 可能反复走引导流程,表现为连接异常。用前面那段 PowerShell 命令补上true,改之前先备份。如果文件本身是坏的 JSON,ConvertFrom-Json会报错,这时把备份还原回去,手动用编辑器补字段。
第四类,多个配置来源打架。环境变量、.claude.json、项目级配置可能同时存在,Claude Code 读取有优先级。排障时先把环境变量设对,再确认.claude.json里没有互相矛盾的旧地址。实在拿不准,就把.claude.json里和地址、Key 相关的字段清掉,只留环境变量这一条路。
第五类,终端缓存。改完配置不重开终端,等于没改。养成习惯:每次动完环境变量,关掉所有 PowerShell 窗口再开新的。
提示:如果按上面全部核对完还是报错,把
echo $env:ANTHROPIC_BASE_URL的输出和报错原文一起看,多数情况下能一眼看出是地址问题还是鉴权问题。
6. 把配置固定下来,下次直接开工
排障做完,建议把这次改对的东西固定成习惯,省得下次换机器或重装又踩一遍。环境变量用setx设过就是持久的,重装系统才需要重设;.claude.json里的hasCompletedOnboarding补过一次也会保留。真正需要你记住的只有两件事:Base URL 是https://taotoken.net/api,Key 从 API Keys 页面拿。
如果你后面要在 Claude Code 里长期跑编码任务,可以到 Coding Plan 页面 https://taotoken.net/coding-plan 看看适合的用法;日常想快速验证模型效果,模型对话页面 https://taotoken.net/models 更顺手;接入细节和参数说明都在接入文档 https://taotoken.net/doc 里,遇到新报错先翻文档比到处搜更快。
最后留一个我自己的小习惯:每次改完配置,先跑一遍echo $env:ANTHROPIC_BASE_URL和那条curl.exe验证命令,两个都对了再启动 Claude Code。这样能把「配置问题」和「客户端问题」提前分开,排障时间能省一大半。