实操教程2026年9月29日阅读约 8 分钟

ERR_PROXY_CONNECTION_FAILED 等 Chrome 代理报错

ERR_PROXY_CONNECTION_FAILED 怎么解决?它表示 Chrome 连不上代理;ERR_TUNNEL_CONNECTION_FAILED 表示代理不肯开隧道。这里是我们实测复现的原因和修法。

ERR_PROXY_CONNECTION_FAILED 怎么解决?先弄清它的意思:Chrome 根本连不上代理。可能是主机或端口写错了,那里没有服务在监听,或者系统设置、某个扩展里开着一个你已经忘了的代理。ERR_TUNNEL_CONNECTION_FAILED 则表示 Chrome 连上了代理,但代理拒绝为这个网站打开隧道,通常是登录、拦截或网站连不上的问题。

这两个代码指向路途的两段,分清它们,就省掉了大半的猜测。下面讲 Chrome 代理连接失败时每个错误代码的含义、我们实际复现出来的原因、Chrome 把相关设置藏在哪里,以及怎么区分是代理的问题还是网站的问题。

我们怎么测的

本页的每个原因都来自我们自己跑的测试。我们用 Playwright 下载的无头 Chrome for Testing 153,通过 --proxy-server 指向几个本地的小代理,每个代理故意只在一个地方出问题:端口没开、用 403/429/502/503 回应 CONNECT、要求登录、直接断开连接,等等。然后记录 Chrome 报出的 net::ERR_ 代码。复现不出来的,我们会明说。

我们设置的情况 Chrome 报的错误
代理端口上没有服务在监听 ERR_PROXY_CONNECTION_FAILED
代理主机名解析不了 ERR_PROXY_CONNECTION_FAILED
用 https:// 协议头指向普通 HTTP 代理 ERR_PROXY_CONNECTION_FAILED
代理用 403、429、502 或 503 回应 CONNECT ERR_TUNNEL_CONNECTION_FAILED
代理回应 CONNECT 的内容根本不是 HTTP ERR_TUNNEL_CONNECTION_FAILED
取消代理登录框,或输错密码后再取消 ERR_TUNNEL_CONNECTION_FAILED
代理正常,但网站域名不存在 ERR_TUNNEL_CONNECTION_FAILED
在 --proxy-server 里写了用户名和密码 ERR_NO_SUPPORTED_PROXIES
Chrome 不认识的协议头,比如 ftp:// ERR_NO_SUPPORTED_PROXIES
代理返回 407,但没给出 Chrome 支持的登录方式 ERR_PROXY_AUTH_UNSUPPORTED
用 socks5:// 指向 HTTP 代理 ERR_SOCKS_CONNECTION_FAILED
代理不作回应就关闭连接 ERR_EMPTY_RESPONSE
代理重置连接 ERR_CONNECTION_RESET
代理接受连接后一直不说话 ERR_TIMED_OUT

ERR_PROXY_CONNECTION_FAILED 是什么意思?

Chrome 试着连接代理的主机和端口,没有连上。请求没有到达任何网站,所以不是网站的问题。我们的测试里有三种原因会导致它:

  1. 主机或端口写错。 Chrome 拿到的地址上没有任何回应。把两者和服务页面上的值逐字对一遍。
  2. 代理主机名解析不了。 主机名有错字,或者你自己网络的 DNS 出了问题。
  3. 协议头写错。 写成 https://HOST:PORT 的代理,意思是要和代理本身建立加密连接。你的服务是普通 HTTP 代理,照样能通过 CONNECT 隧道访问 https 网站,所以请用 http://。

还有一个原因在实验室里测不了,但值得尽早排除:服务已经到期或余额用完。去控制台确认服务仍显示为有效。

你忘了关的那个代理

遇到 ERR_PROXY_CONNECTION_FAILED,有一种很容易发生的情况:用的是一个根本没打算用的代理。Chrome 和 Edge 自己没有代理设置表单。Chrome 设置里的代理一项,其实是一个叫“打开您计算机的代理设置”(Open your computer’s proxy settings)的链接,它通往操作系统的设置面板,而这台电脑上的每个浏览器都会读取那里。

所以,上个月为某次测试设置的代理,服务早就停用了,今天依然能让 Chrome 的每个页面都打不开。去这里看看:

  • Windows 11: 设置 → 网络和 Internet → 代理。看“手动设置代理”下的“使用代理服务器”,如果不是你有意打开的,就关掉。
  • macOS: 系统设置 → 网络 → 你的连接(Wi-Fi 或以太网)→ 详细信息 → 代理。检查“网页代理(HTTP)”和“安全网页代理(HTTPS)”。

Windows 与 macOS 教程逐项讲解了这两个面板。

代理被某个扩展接管了

FoxyProxy 这类代理扩展会在单个浏览器里覆盖系统设置。当扩展接管时,Chrome 会在设置页上写明。我们装了一个会设置代理的测试扩展,再打开 chrome://settings/system,代理那一行显示 “Chrome for Testing is using proxy settings from an extension”(普通 Chrome 里产品名不同),下面一行是 “Test Proxy Switcher is controlling this setting”,旁边有一个 Disable 按钮。

如果你看到这一行,而扩展指向的是一个旧代理,就把扩展切换到直连或停用模式,或者直接点那个按钮停用它。FoxyProxy 怎么在代理和直连之间切换,见浏览器教程。

ERR_TUNNEL_CONNECTION_FAILED 是什么意思?

Chrome 连上了代理,并用 CONNECT 请它打开一条通往网站的隧道,而代理的回答不是“成功”。我们试过的每一种拒绝都得到同一个代码:403、429、502、503,以及一段根本不是 HTTP 的回复。麻烦就在这里:Chrome 把代理发回的状态码藏起来了。

我们复现出来的原因:

  • 登录被拒绝。 代理要求用户名和密码时,Chrome 会弹出登录框。点取消,或者输错密码后在再次弹出的登录框里点取消,页面就会报 ERR_TUNNEL_CONNECTION_FAILED。看起来没错的密码为什么会被拒,见 407 错误怎么解决。
  • 代理连不上网站。 通过正常的代理访问一个拼错的网址,得到的是 ERR_TUNNEL_CONNECTION_FAILED,而不是 DNS 错误,因为域名由代理去解析,失败后它回一个 502。网站拒绝连接时也是一样。
  • 代理拒绝了这个请求。 用 403 或 429 回应 CONNECT,说明是代理这一端不让过:可能是限额、被禁止的目标,或者账户问题。

想看到 Chrome 藏起来的状态码,用 curl 发同样的请求。它会把代理对 CONNECT 的回答和网站的回答分开打印:

curl -s -o /dev/null -x "http://USERNAME:PASSWORD@HOST:PORT" \
  -w 'proxy said %{http_connect}, site said %{http_code}\n' \
  https://api.ipify.org

在我们的测试代理上,代理拒绝开隧道时打印的是 proxy said 429, site said 000,同时出现 curl: (56) CONNECT tunnel failed, response 429。隧道正常、网站在限流时,打印的是 proxy said 200, site said 429。前者要去查代理;后者是网站的事,请看 429 错误怎么解决。各个代理状态码通常代表什么,见代理错误代码大全。

ERR_NO_SUPPORTED_PROXIES:把登录信息写进了 --proxy-server

这个错误多半出现在用程序驱动 Chrome 的时候。Chrome 的 --proxy-server 参数只接受协议头、主机和端口。我们测试时在里面写上 USERNAME:PASSWORD@,Chrome 就以 ERR_NO_SUPPORTED_PROXIES 拒绝了整个代理列表;写一个它不认识的协议头,结果也一样。

登录信息要换个方式提供。Playwright 的 proxy 选项有 username 和 password 字段,用上之后测试页面正常加载。Playwright 和 Selenium 教程分别给出了写法。或者在控制台里把你机器的公网 IP 加进服务的 IP 白名单,之后 --proxy-server=http://HOST:PORT 就完全不需要登录。

一个相关的坑:代理要求登录而你没有提供凭据时,无头 Chrome 并不会报错,而是一直卡着,直到我们设的超时,因为它在等一个谁也看不见的登录框。

ERR_PROXY_AUTH_UNSUPPORTED

我们只在一种情况下复现出它:代理返回 407,但给出的登录方式 Chrome 不支持,或者干脆没给。你的服务要求的是普通的用户名和密码,Chrome 能处理。如果你看到这个代码,怀疑路径上还有别的代理,比如公司或学校网络的代理,并检查上面说的系统设置。

你可能遇到的其他代码

  • ERR_SOCKS_CONNECTION_FAILED: 代理设置写的是 socks5://,但代理说的是 HTTP,或者它要求 SOCKS5 登录,而 Chrome 发不了。改用 http://,或者把你的 IP 加进白名单。
  • ERR_EMPTY_RESPONSE 和 ERR_CONNECTION_RESET: 代理在回应之前就断开了连接。先重试,再换一个网络试试,排除你这边防火墙的问题。
  • ERR_TIMED_OUT: 代理接受了连接,却一言不发。代理超时错误教你用 curl 把这段时间拆开看。

chrome://net-internals:清掉 Chrome 对代理的记忆

Chrome 会在两次尝试之间保留状态:到代理的已打开连接,以及一份最近失败过的代理名单。改好设置之后,先把这两样清掉,再判断有没有修好。

  • chrome://net-internals/#proxy 有两个按钮:Re-apply settings 和 Clear bad proxies。在我们测试的版本里,这个页面只有这两个按钮,并不列出当前生效的设置,所以设置要去设置页上看。
  • chrome://net-internals/#sockets 有 Close idle sockets 和 Flush socket pools。Flush 会让 Chrome 重新建立连接,隧道也随之重建。这一点在住宅代理的 Randomize IP 模式下也有用,因为保持连接的隧道会一直用同一个出口地址。

什么时候是网站的问题

有些故障看起来像代理出错,其实不是:

  • 页面正常打开,但显示 403 或验证码。 Chrome 加载到了内容,说明隧道是通的。是网站在拒绝这个出口 IP 或你的访问方式。按顺序排查原因,见爬虫为什么突然被封。
  • 普通 http:// 页面显示代理发来的错误。 对于不加密的页面,Chrome 会把代理发回的内容原样显示,所以 502 会以页面的形式出现,而不是 net::ERR_ 代码。
  • 只有一个网站报 ERR_TUNNEL_CONNECTION_FAILED。 用同一个代理打开 https://api.ipify.org。如果能打开、显示的也不是你自己的地址,说明代理没问题,问题出在出口和那个网站之间。

常见问题

ERR_PROXY_CONNECTION_FAILED 怎么解决? 先看 Chrome 用的是哪个代理(系统设置还是扩展),把主机和端口和服务页面对一遍,再确认服务仍然有效。如果你本来就不想用代理,把它关掉。

ERR_TUNNEL_CONNECTION_FAILED 是我的问题还是网站的问题? 都有可能。跑一下上面的 curl 命令:“proxy said” 不是 200,是代理那一端;是 200、后面网站报错,是网站的问题。

Chrome 为什么不问我代理密码? 只有代理要求登录时它才会问,而无头 Chrome 显示不了登录框。通过自动化工具提供凭据,或者用 IP 白名单。

能在 Chrome 的代理设置里写 user:pass 吗? 不能。填主机和端口,在登录框里输入用户名和密码,或者用一个带登录字段的扩展。

下一步

在走代理的浏览器里打开 https://api.ipify.org。如果能打开、显示的不是你自己的地址,代理就是正常的,剩下的故障在出口和目标网站之间。如果还是卡住,把错误代码和上面 curl 命令的输出(去掉密码)发到 Discord。

还有后续问题?

去 Discord 问。答案还能帮到下一个读到这个帖子的人。

加入 Discorddiscord.gg/proxypanda
$5 起步去 Discord 问