在中国使用 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
开TUN模式可以,要记得这个权限确定没被屏蔽,可以搜一下相关的。
但是我的VPN是那种超级老的,SSR那种格式的,我用的软件没有TUN模式。
我没解决,反正cowork和code功能差不多,就用code了。
而且现在code或者chat或者cowork(应该是也可以,没连成功就没用过)都已经可以连chrome浏览器了直接,够我用了。
cowork走的是虚拟机貌似只能靠TUN模式,可以看一下这个帖子:https://www.xugj520.cn/en/archives/claude-cowork-flaws-preview-review.html
帖子内容这段:“ 2.1 代理切换问题:为什么 403 错误并非你的错
用户看到的画面:
“如果我的本地代理工具没有处于 TUN 模式,Cowork 就无法拦截自身的请求。该功能会直接失效——返回 403 错误。”
底层原理:
与许多现代桌面应用程序一样,Claude macOS 应用程序也是基于 Web 框架(例如 Electron)构建的。它的网络请求通常会遵循操作系统的代理设置。
但这里的关键词是“通常”。
HTTP/HTTPS 代理:如果应用程序明确支持,则可以正常工作。某些网络库,特别是用于实时通信的库,不会自动继承系统代理配置。
TUN模式:高级代理工具(Clash、Surge、Quantumult X)中的一项功能,它会创建一个虚拟网络接口。无论源应用程序是否“知道”代理的存在,它都会捕获所有IP流量。
Cowork 似乎使用了与 Claude 主聊天界面不同的网络协议栈。可能是 WebSocket,也可能是自定义传输层。无论是什么,它都无法很好地兼容标准的 HTTP 代理。
可量化的影响:
设想 联合办公功能 错误
无代理 已被防火墙阻止 连接超时
仅限 HTTP 代理 100% 无效 HTTP 403 禁止访问
已启用 TUN 模式 功能齐全 没有任何
为什么是 403 错误?
403 Forbidden 错误通常意味着:“您已连接到服务器,但您无权访问。” 当请求绕过代理直接从某些地区发出时,服务器无法收到预期的授权标头或 IP 白名单,因此会拒绝连接。错误代码本身是正确的,但对于诊断根本原因毫无帮助。
用户心得:
这并非 Cowork 的漏洞,而是预览版中网络工程方面的疏忽。解决方法是启用 TUN 模式,虽然有效,但会占用 5% 到 10% 的系统资源,并且需要用户了解 TUN 模式是什么。
成熟的产品要么是:
为所有网络调用实现显式 HTTP 代理支持
或者显示清晰的诊断信息:“我们检测到您的网络配置可能会阻止 Cowork 的连接。请按以下步骤操作。”
目前,它两者都做不到。”