Skip to content

Instantly share code, notes, and snippets.

@docularxu
Last active March 11, 2026 18:16
Show Gist options
  • Select an option

  • Save docularxu/db0053008b9f41328f29d39ffcf7c2b2 to your computer and use it in GitHub Desktop.

Select an option

Save docularxu/db0053008b9f41328f29d39ffcf7c2b2 to your computer and use it in GitHub Desktop.
在中国使用 Claude Code 解决 403 错误 - 完整指南(中文版)

在中国使用 Claude Code 解决 403 错误 - 完整指南(中文版)

在中国使用 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

在 VS Code 设置里加:

{
  "http.proxy": "http://127.0.0.1:7890"
}

亲测没用。Claude 扩展似乎不读 VS Code 的代理设置。

❌ 从 Dock/Finder 启动 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 的服务器)。

✅ 第二步:设置 HTTPS_PROXY 环境变量

macOS (zsh):

echo 'export HTTPS_PROXY="http://127.0.0.1:7890"' >> ~/.zshrc
source ~/.zshrc

Linux (bash):

echo 'export HTTPS_PROXY="http://127.0.0.1:7890"' >> ~/.bashrc
source ~/.bashrc

✅ 场景一:macOS 终端(Claude CLI)

设好 HTTPS_PROXY 后,直接登录:

claude /login

OAuth 流程正常完成 - 浏览器打开、拿到授权码、粘贴回来,roles 接口不再 403,因为流量走了代理。

如果之前登录失败过,先清除状态:

claude /logout
claude /login

登录成功后,claude 在任何终端会话中都能正常使用(前提是 HTTPS_PROXY 已设置)。

✅ 场景二:VS Code 终端

如果你从终端启动 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 .

✅ 场景三:VS Code Claude Code 扩展

Claude Code 扩展(VS Code 里的聊天面板)同样需要 HTTPS_PROXY 来连接 Anthropic 服务器。规则一样:从终端启动 VS Code,让扩展进程继承代理变量。

这样启动后,打开 Claude Code 聊天面板就能正常连接了。

✅ 附加:VS Code Remote SSH

如果你通过 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

@jiankang1991
Copy link

新出的claude desktop好像这种代理vpn是不行的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment