1. Claude Code 网络问题先分三层
| 链路 | 用途 | 常见表现 |
|---|---|---|
| Claude Code → API/Base URL | 发送模型请求和接收流式响应 | ECONNRESET、ETIMEDOUT、fetch failed、401/5xx |
| Claude Code → 登录或连接预检 | OAuth、服务可达性和启动检查 | Checking connectivity、ERR_SOCKET_CLOSED |
| Claude Code → 本机 IDE | 连接 VS Code 等本地扩展 | Failed to connect to IDE、本地 WebSocket 断开 |
这三条链路不能使用同一个结论。API 请求需要代理时,本地 ws://127.0.0.1:PORT 仍应绕过代理;预检失败也不一定等于实际 API 不可达。

2. Reconnecting、ECONNRESET 与 ERR_SOCKET_CLOSED 的区别
- Reconnecting 后自动恢复:流式连接中途断开,客户端重试成功。记录频率和发生时间,偶发不等于配置错误。
- ECONNRESET 持续出现:连接被对端或中间网络重置。代理、TLS 检查、网络波动和服务端都可能触发。
- ETIMEDOUT / fetch failed:目标地址或代理在超时内没有建立连接,先检查 Base URL、DNS 和代理端口。
- Checking connectivity → ERR_SOCKET_CLOSED:可能是启动预检与企业 TLS 代理不兼容,需与实际 API 请求结果对照。
- IDE 连接失败:优先检查 loopback 是否被
HTTP_PROXY/HTTPS_PROXY接管。
3. HTTP_PROXY、HTTPS_PROXY 与 NO_PROXY 怎么配
如果当前网络需要本地代理访问 API,可使用实际 HTTP 或 mixed 端口。不要照抄示例端口,也不要在文章、日志或工单中暴露带用户名密码的企业代理 URL。
export HTTP_PROXY="http://127.0.0.1:PORT"
export HTTPS_PROXY="http://127.0.0.1:PORT"
export NO_PROXY="localhost,127.0.0.1,::1"
export no_proxy="localhost,127.0.0.1,::1"$env:HTTP_PROXY = "http://127.0.0.1:PORT"
$env:HTTPS_PROXY = "http://127.0.0.1:PORT"
$env:NO_PROXY = "localhost,127.0.0.1,::1"
$env:no_proxy = "localhost,127.0.0.1,::1"- 确认代理软件实际监听协议和端口。
- 检查是否同时存在大小写两套变量,避免旧值覆盖。
- 保证
NO_PROXY与no_proxy都包含 loopback。 - 完全退出 Claude Code 和编辑器,再启动新会话。
- 先验证短文本 API 请求,再执行
/ide或工具调用。
NODE_USE_ENV_PROXY=1会启用 Node 的原生环境代理行为,只应在确认当前 Node/CLI 版本和部署方式需要时设置。不要为了“试试看”同时开启多个代理机制。
4. 为什么大写 NO_PROXY 正确,IDE 仍连接失败
Claude Code issue #79545记录了一种大小写优先级问题:在 NODE_USE_ENV_PROXY=1 下,如果小写 no_proxy 存在但没有 loopback,它可能优先于正确的大写 NO_PROXY。结果是本地 IDE WebSocket 被送入 HTTP/HTTPS 代理。
# macOS / Linux
env | grep -i proxy
# PowerShell
Get-ChildItem Env: | Where-Object Name -Match 'proxy'修复重点不是删除所有代理,而是让本机地址始终绕过代理。保存当前值后,把两种大小写都统一为包含 localhost,127.0.0.1,::1 的列表。重启后再次连接 IDE,并检查企业代理日志中是否还出现本机 loopback 端口。
5. 企业 HTTPS 代理下卡在 Checking connectivity
公开 issue #81611记录过 Claude Code 2.1.220 的启动预检在企业 HTTPS 代理下返回 ERR_SOCKET_CLOSED,但同一代理上的 curl 与实际 SDK 请求可达。这个案例说明:预检使用的网络客户端与模型请求路径可能不同。
- 使用同一代理对当前 API/Base URL 做最小可达性测试。
- 用无效测试密钥得到明确 401,也能证明网络已经到达 API;不要使用生产密钥做公开诊断。
- 记录 Claude Code 版本,优先升级到当前稳定版本后复测。
- 如果问题明确由版本回归引起,可在隔离测试环境临时固定已知可用版本,同时保留升级计划。
- 不要关闭 TLS 验证来绕过企业证书问题;应安装组织提供的可信 CA,并按官方方式配置证书链。
6. Claude Code 中转 API 的分层验证
| 结果 | 判断 |
|---|---|
| 控制台没有任何请求记录 | 请求尚未到达 Base URL,检查环境变量、DNS、代理和客户端读取路径 |
| 控制台记录 401/403 | 网络已到达网关,转查 API Key、密钥分组和模型权限 |
| 短请求成功,长任务中途 ECONNRESET | 检查流式持续时间、网络切换、上游中断和代理空闲超时 |
| API 请求成功,只有 /ide 失败 | 检查 NO_PROXY/no_proxy 和本地 WebSocket |
| 多个网络都高频重置 | 记录请求 ID、时间和版本,排查客户端或服务端问题 |
Claude Code 中转配置见Claude Code API 配置教程。提交客服时提供脱敏时间、模型、错误码、请求 ID、版本和复现步骤,不要发送完整密钥。
7. 修改后的验证与回滚
- 备份修改前的代理变量和值,代理密码必须脱敏。
- 新开终端,发送一个短文本请求。
- 连接 IDE,确认本地 WebSocket 不经过代理。
- 运行一个持续时间稍长但只读的任务,观察是否中途重连。
- 恢复原配置重复测试,确认问题确实由本次修改解决。
8. 常见问题
ECONNRESET 一定是代理问题吗?
不一定。它只表示连接被重置;无代理环境也可能出现。结合代理变量、请求记录、客户端版本和是否跨网络复现判断。
NO_PROXY 应该写什么?
至少写入 localhost、127.0.0.1 和 ::1,并同步检查小写 no_proxy,避免本地 IDE WebSocket 被送进代理。
卡在 Checking connectivity 怎么办?
用同一代理测试 API 实际可达性并记录版本。若实际请求可达而预检失败,优先升级;确认版本回归后才临时回退。
配置代理后需要重启吗?
需要。旧的 Claude Code 和编辑器进程不会自动继承新环境变量,应完全退出后重新打开。
* 本文为 island AI Coding 技术团队原创整理。网络分层参考 Claude Code 官方错误参考和公开 issue;issue 行为可能随版本变化,不能把特定旧版本回退当作永久配置。更新时间:2026-09-01。
参考:Claude Code 官方错误参考 · NO_PROXY 与 IDE WebSocket · 企业 HTTPS 代理预检 · Windows ECONNRESET