Claude Code · 网络排查

Claude Code 代理后一直 Reconnecting 或 ECONNRESET 怎么办?

Claude Code 的网络不只有一条:模型 API 请求要访问远端服务,IDE 集成却通过本机 loopback WebSocket 通信。代理配置错误时,远端请求可能出不去,本地连接也可能被误送进代理。先确认断在哪一段,再修改环境变量。

更新日期:2026-09-01·作者:island AI Coding 技术团队·主词:Claude Code 代理
常见错误ECONNRESET / ETIMEDOUT
本地连接localhost / 127.0.0.1
核心变量HTTPS_PROXY / NO_PROXY

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 不可达。

直连首页 200 与无监听代理端口连接失败的终端对照证据
代理路径对照:直连 `www.codex789.com` 返回 200;指定 127.0.0.1:1 代理时返回 curl 7,故障可在代理层独立复现。

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 接管。
ECONNRESET 不是“代理错误码”公开 issue 中存在 Windows 11、无代理且跨不同网络仍频繁重置的报告。没有代理证据时,应同时查看服务状态、客户端版本和中途断流日志。

3. HTTP_PROXY、HTTPS_PROXY 与 NO_PROXY 怎么配

如果当前网络需要本地代理访问 API,可使用实际 HTTP 或 mixed 端口。不要照抄示例端口,也不要在文章、日志或工单中暴露带用户名密码的企业代理 URL。

macOS / Linux(示意)
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"
Windows PowerShell(当前会话)
$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"
  1. 确认代理软件实际监听协议和端口。
  2. 检查是否同时存在大小写两套变量,避免旧值覆盖。
  3. 保证 NO_PROXYno_proxy 都包含 loopback。
  4. 完全退出 Claude Code 和编辑器,再启动新会话。
  5. 先验证短文本 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 请求可达。这个案例说明:预检使用的网络客户端与模型请求路径可能不同。

  1. 使用同一代理对当前 API/Base URL 做最小可达性测试。
  2. 用无效测试密钥得到明确 401,也能证明网络已经到达 API;不要使用生产密钥做公开诊断。
  3. 记录 Claude Code 版本,优先升级到当前稳定版本后复测。
  4. 如果问题明确由版本回归引起,可在隔离测试环境临时固定已知可用版本,同时保留升级计划。
  5. 不要关闭 TLS 验证来绕过企业证书问题;应安装组织提供的可信 CA,并按官方方式配置证书链。
不要把 issue 中的旧版本号当作长期方案版本回退只用于确认回归和临时恢复。修复发布后应恢复受支持版本,并重新验证代理和证书设置。

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. 修改后的验证与回滚

  1. 备份修改前的代理变量和值,代理密码必须脱敏。
  2. 新开终端,发送一个短文本请求。
  3. 连接 IDE,确认本地 WebSocket 不经过代理。
  4. 运行一个持续时间稍长但只读的任务,观察是否中途重连。
  5. 恢复原配置重复测试,确认问题确实由本次修改解决。

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