在中国使用 Claude Code 解决 403 错误 - 完整指南(中文版)
2026 年 2 月 12 日
如果你在中国尝试使用 Claude Code,大概率会撞上 403 错误。本文覆盖三种使用场景的解决方案:
- macOS 终端 (shell) - 在终端里直接使用 claude 命令行
- VS Code 终端 - 在 VS Code 内置终端里使用 claude 命令行
- VS Code Claude Code 扩展 - 使用 VS Code 里的 Claude Code 聊天面板
三种场景的根本原因和解决思路相同,但各有各的坑。
你会看到以下错误之一:
OAuth error: Failed to fetch user roles: Request failed with status code 403
Unable to connect to Anthropic services
Failed to connect to api.anthropic.com: ERR_BAD_REQUEST
Note: Claude Code might not be available in your country.
我花了一上午搞定这个问题,把踩过的坑都记录下来,希望能帮你少走弯路。
Anthropic 屏蔽了来自中国 IP 的 API 访问。这影响所有环节 - OAuth 登录、API 调用、CLI 和 VS Code 扩展。即使你有付费的 Claude Max 订阅,从中国 IP 发出的请求一律 403。
快速测试:
curl -I https://api.anthropic.com如果返回 HTTP/2 403 - 说明被屏蔽了。如果超时 - 可能是 DNS 或防火墙问题。
OAuth 授权码交换本身能成功(浏览器里拿到 code),但 roles 接口返回 403。重新 /login、清除凭证、换浏览器都没用。屏蔽是基于 IP 的,跟账号无关。
在 VS Code 设置里加:
{
"http.proxy": "http://127.0.0.1:7890"
}亲测没用。Claude 扩展似乎不读 VS Code 的代理设置。
macOS 从 Dock 或 Finder 启动的 GUI 应用不会继承 shell 环境变量。所以即使你在 ~/.zshrc 里设了 HTTPS_PROXY,从 Dock 启动的 VS Code 也看不到。
我用的是 Clash + 境外代理服务器。其他工具也行(V2Ray、Shadowsocks 等),只要能提供 HTTP 代理端口。
你需要知道代理的 HTTP 端口号,查看方法:
- Clash: Settings → HTTP Port(默认 7890)
- V2Ray: 配置文件的 inbounds 段,找 HTTP 代理端口
- Shadowsocks: 通常是 1080(SOCKS)或查看客户端的 HTTP 代理设置
我的 Clash 跑在本地 7890 端口(你的可能不同,后续操作请替换成你自己的端口)。验证代理是否可用:
curl -I --proxy http://127.0.0.1:7890 https://api.anthropic.com看到 HTTP/1.1 200 Connection established 后面跟一个非 403 的响应就对了(404 也行 - 说明请求到达了 Anthropic 的服务器)。
macOS (zsh):
echo 'export HTTPS_PROXY="http://127.0.0.1:7890"' >> ~/.zshrc
source ~/.zshrcLinux (bash):
echo 'export HTTPS_PROXY="http://127.0.0.1:7890"' >> ~/.bashrc
source ~/.bashrc设好 HTTPS_PROXY 后,直接登录:
claude /loginOAuth 流程正常完成 - 浏览器打开、拿到授权码、粘贴回来,roles 接口不再 403,因为流量走了代理。
如果之前登录失败过,先清除状态:
claude /logout
claude /login登录成功后,claude 在任何终端会话中都能正常使用(前提是 HTTPS_PROXY 已设置)。
如果你从终端启动 VS Code,它的内置终端会继承 shell 的 HTTPS_PROXY。所以 claude 命令行在 VS Code 终端里也能用。
关键:必须从终端启动 VS Code,不能从 Dock/Finder 启动(见上面"不管用的方法")。
macOS 上,如果 code 命令被映射到了其他编辑器(我的映射到了 Cursor),用:
open -a "Visual Studio Code" .可以设个别名方便使用:
echo 'alias vscode="open -a \"Visual Studio Code\""' >> ~/.zshrc
source ~/.zshrc
# 之后直接:
vscode .Claude Code 扩展(VS Code 里的聊天面板)同样需要 HTTPS_PROXY 来连接 Anthropic 服务器。规则一样:从终端启动 VS Code,让扩展进程继承代理变量。
这样启动后,打开 Claude Code 聊天面板就能正常连接了。
如果你通过 VS Code SSH 到远程机器(比如 Linux 虚拟机),Claude 扩展运行在远程端。所以远程机器也需要设置 HTTPS_PROXY。
我的环境:MacBook Pro 上跑 Parallels Ubuntu 虚拟机。Mac 的桥接网卡 IP 是 192.168.2.1,在虚拟机里:
echo 'export HTTPS_PROXY="http://192.168.2.1:7890"' >> ~/.bashrc
source ~/.bashrc确保你的代理允许局域网连接(Clash 里打开 Allow LAN)。
然后在 Mac 端从终端启动 VS Code,打开 Remote SSH 会话,远程机器上的 Claude 扩展也能正常工作了。
| 步骤 | 操作 |
|---|---|
| 1 | 配置代理/VPN(Clash、V2Ray 等) |
| 2 | 在 shell 配置文件里设置 HTTPS_PROXY=http://127.0.0.1:<端口> |
| 3 | claude /logout 然后 claude /login 重新登录 |
| 4 | 从终端启动 VS Code(不要从 Dock 启动) |
| 5 | 远程机器也要设 HTTPS_PROXY,指向代理的局域网 IP |
问题的本质很简单:Anthropic 屏蔽中国 IP,macOS GUI 应用不继承 shell 环境变量。理解这两点,一切迎刃而解。
关于作者: Guodong Xu - Linux kernel developer, RISC-V upstream contributor
设置环境变量的步骤,在windows环境下可以参考:
一、临时设置(仅当前 CMD/PowerShell 窗口有效)
这种方式设置后,关闭当前命令行窗口就会失效,适合临时测试使用。
1. CMD 命令提示符
打开 CMD(按下 Win+R,输入
cmd回车),执行以下命令:2. PowerShell
打开 PowerShell(按下 Win+R,输入
powershell回车),执行以下命令:二、永久设置(全局生效,重启后仍有效)
这种方式会把环境变量写入系统,所有命令行窗口和程序都能使用,分两种操作方式:
方式 1:图形界面操作(新手推荐)
Win + I打开系统设置,搜索并点击「高级系统设置」;HTTPS_PROXY,变量值:http://127.0.0.1:7890;方式 2:命令行永久设置(管理员权限)
适合习惯命令行操作的场景,需要以管理员身份运行 PowerShell:
三、验证是否设置成功
无论哪种方式,设置后打开新的 CMD/PowerShell,执行以下命令验证:
如果输出
http://127.0.0.1:7890,说明设置成功。