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

@free-booter
Copy link

VS Code Claude Code 扩展为什么我还是不可以呀?vscode终端可以使用

@yirangong
Copy link

这个怎么让才能不用每次用之前都设置一遍呀~

@zala13
Copy link

zala13 commented Feb 28, 2026

感谢

@zala13
Copy link

zala13 commented Feb 28, 2026

设置环境变量的步骤,在windows环境下可以参考:

一、临时设置(仅当前 CMD/PowerShell 窗口有效)

这种方式设置后,关闭当前命令行窗口就会失效,适合临时测试使用。

1. CMD 命令提示符

打开 CMD(按下 Win+R,输入 cmd 回车),执行以下命令:

set HTTPS_PROXY=http://127.0.0.1:7890

2. PowerShell

打开 PowerShell(按下 Win+R,输入 powershell 回车),执行以下命令:

$env:HTTPS_PROXY = "http://127.0.0.1:7890"

二、永久设置(全局生效,重启后仍有效)

这种方式会把环境变量写入系统,所有命令行窗口和程序都能使用,分两种操作方式:

方式 1:图形界面操作(新手推荐)

  1. 按下 Win + I 打开系统设置,搜索并点击「高级系统设置」;
  2. 在弹出的「系统属性」窗口中,点击「环境变量」;
  3. 在「用户变量」或「系统变量」区域(推荐选「用户变量」,仅当前用户生效),点击「新建」;
  4. 变量名:HTTPS_PROXY,变量值:http://127.0.0.1:7890
  5. 点击「确定」保存,关闭所有窗口;
  6. 生效方式:关闭已打开的 CMD/PowerShell,重新打开即可生效。

方式 2:命令行永久设置(管理员权限)

适合习惯命令行操作的场景,需要以管理员身份运行 PowerShell:

  1. 右键开始菜单,选择「Windows PowerShell (管理员)」;
  2. 执行以下命令(设置用户级环境变量,无需管理员也可,但管理员更稳妥):
# 设置永久环境变量(用户级)
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://127.0.0.1:7890", [EnvironmentVariableTarget]::User)
  1. 生效方式:重新打开 CMD/PowerShell 即可,无需重启电脑。

三、验证是否设置成功

无论哪种方式,设置后打开新的 CMD/PowerShell,执行以下命令验证:

# CMD 验证
echo %HTTPS_PROXY%

# PowerShell 验证
echo $env:HTTPS_PROXY

如果输出 http://127.0.0.1:7890,说明设置成功。

@docularxu
Copy link
Author

VS Code Claude Code 扩展为什么我还是不可以呀?vscode终端可以使用

在 Mac OS 里面,我是需要从zsh终端启动 VS Code (目的:让 Claude Code 扩展能够继承代理变量。)。不能点击 VS Code app 图标。
具体执行:
open -a "Visual Studio Code" .

@docularxu
Copy link
Author

感谢您的分享 zala13

设置环境变量的步骤,在windows环境下可以参考

@free-booter
Copy link

VS Code Claude Code 扩展为什么我还是不可以呀?vscode终端可以使用

在windows系统中,我通过设置用户环境变量HTTPS_PROXY和HTTP_PROXY成功在vscode的扩展中使用claude

@EddieHee
Copy link

EddieHee commented Mar 3, 2026

这个怎么让才能不用每次用之前都设置一遍呀~

@yirangong
在mac os系统下,我常用的命令行工具是 iterm2 (zsh), 我个人的解决办法是在我的.zshrc中写入如下指令,在每次打开命令行工具的时候它都会预加载对应方法。如此,我只需要在terminal中输入 proxy_on 后就可以开启代理、proxy_off就可以关闭代理。当然,对应的代理端口取决于你的工具了。

注意:这种做法只会影响当前 shell 进程以及它启动的子进程(curl、git、pip、npm、brew…)不会自动影响浏览器(Chrome/Safari)、系统“网络设置里的代理”或已经在别的终端窗口里跑着的进程。

# --- 终端代理开关 ---
# 开启:proxy_on
# 关闭:proxy_off

proxy_on() {
    export https_proxy=http://127.0.0.1:端口号
    export http_proxy=http://127.0.0.1:端口号
    export all_proxy=http://127.0.0.1:端口号
    echo "✅ 代理已开启 (HTTP -> 127.0.0.1:端口号)"
}

proxy_off() {
    unset https_proxy
    unset http_proxy
    unset all_proxy
    echo "🚫 代理已关闭"
}

@mofelee
Copy link

mofelee commented Mar 3, 2026

如果用 surge , 网站可以登录的情况下,可以通过 “关闭 Enhanced Mode” 再 “启动Enhanced Mode” 解决, surge 有时候接管系统有小问题。。

@dacodingbee
Copy link

dacodingbee commented Mar 5, 2026

哇,老师你讲的真的是一针见血,透过现象看本质。我完全是技术小白,今天在vs code运行cc遇到403问题,结果跟着你的教程操作(碰到不懂的词去搜索,理解原理),成功运行了cc!我想问下,对于VPN的节点这些,需要变动吗?我现在是Clash, 美国节点,Local,allow connect from Lan.

@JFHuang746
Copy link

新出的claude cowork app怎么搞?好像从终端启动没办法正常用

@Whosemario
Copy link

整好了,感谢老师

@dacodingbee
Copy link

新出的claude cowork app怎么搞?好像从终端启动没办法正常用

我也是诶,同问。刚刚用新的Claude Cowork 试了显示403

@dazhaoDai
Copy link

NB

@jiankang1991
Copy link

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

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