代理指南

Chrome 出现 ERR_PROXY_CONNECTION_FAILED 的排查与修复

从 Chrome 实际使用的代理设置开始,依次检查地址、端口、协议与连接模式,对照端点测试和本机结果定位问题并验证恢复。

本地客户端与直接远程端点的代理连接检查

概览

操作流程

  1. 确认生效的代理

    找到 Chrome 使用的系统设置、扩展或本地监听器。

  2. 测试并验证线路

    从同一设备测试端点,再检查浏览器出口和原始目标。

ERR_PROXY_CONNECTION_FAILED 表示 Chrome 无法连接到当前配置要求它使用的代理。失败可能发生在解析代理主机名时,也可能发生在连接代理地址和端口时。应先检查这段连接,而不是直接修改目标网站的相关设置。

先确认你是否打算使用代理。如果是旧的本地应用遗留了不需要的设置,应修正那项设置。如果代理本来就是工作流程的一部分,应保留所需线路,检查它的主机、端口、协议和可用状态。对于受管理设备,请使用管理员提供的配置。

下面的步骤可以帮助你区分浏览器设置问题与代理端点无法访问的问题,并在自己的浏览器中验证修复结果。

目录:找到生效的设置;核对连接字段;测试线路;解读测试结果;验证修复;常见问题。

从可以复现的现象开始

本地客户端与直接远程端点的代理连接检查
先检查浏览器实际线路,再测试对应本地监听器或远程端点。

先确认浏览器当前走哪条线路,再检查这条线路使用的本地监听端口或远程端点。

观察到的现象

优先检查

结果说明什么

Chrome 失败,但另一个应用可以使用

Chrome 的代理扩展、策略和系统代理设置

不同应用可能使用了不同线路

代理地址是 127.0.0.1 或 localhost

本地代理应用及其监听端口

该地址指向当前设备;应用关闭后就没有程序接受连接

同一设备上的连接测试失败

端点拼写、端口、协议和网络可达性

问题并不局限于 Chrome 的页面渲染

远程检查器成功,但浏览器失败

本地网络路径和浏览器配置

检查器和浏览器从不同位置访问端点

连接返回 HTTP 407

代理鉴权

代理已经响应,应转而检查凭据或要求的鉴权方式

出口 IP 检查成功,但某个网站失败

目标响应及针对该目标的规则

代理线路至少能完成一次请求,应保留目标的实际错误信息

1. 找到 Chrome 实际使用的代理设置

打开 Chrome 的 设置 → 系统,或输入 chrome://settings/system。检查代理设置是否由扩展或组织控制。如果不是,打开计算机的代理设置,检查当前生效的网络配置。

Windows

打开 设置 → 网络和 Internet → 代理,同时检查设置脚本和手动代理部分。修改前记录原有值。如果你确实需要代理,应修正所提供的服务器地址和端口。如果某项设置属于已经停用的本地代理应用,只删除那项不再需要的设置并保存。

macOS

打开 系统设置 → 网络,选择当前使用的网络服务,再进入 详细信息 → 代理。检查已启用的 HTTP、HTTPS、SOCKS 或自动配置项。修正工作流程实际使用的配置;修改其他网络服务不会修复当前线路。

代理由扩展控制时

打开扩展,检查所选配置、端点和路由规则。对于自己管理且不受组织控制的浏览器,如果需要确认某个不再使用的扩展是否导致问题,可以暂时关闭该扩展再测试。记录哪项设置改变了结果,以便随后恢复需要的线路。

代理地址是本地地址时

启动本地代理应用,确认当前监听端口。不要假设所有客户端都使用 7890 或 8080 等端口。浏览器必须指向应用实际监听的端口;本地应用连接上游代理又是另一段独立连接。

设置入口可参考官方的 Windows 代理设置说明和 macOS 代理设置说明。

2. 检查复制的代理端点

打开准备使用的代理连接记录,逐项核对字段,不要只反复粘贴整条连接字符串。

字段

检查内容

主机

使用服务商提供的连接主机,不要填写网站 URL,也不要用界面中单独显示的出口 IP 替代

端口

使用与该主机和协议配套的端口;区分远程端点端口和本地客户端监听端口

协议

HTTP、HTTPS 或 SOCKS 必须与端点及客户端匹配;目标网站使用 HTTPS,不代表代理协议必须选择 HTTPS

鉴权

使用代理凭据,避免多余空格;不要用网站账户的登录密码替代

可用状态

检查套餐到期时间、余额、适用的用量限制,以及当前分配的资源

对于 MIYAIP 静态代理,打开 已购买 IP,选择准备使用的原生或中转连接详情。从中国大陆使用原生连接,需要有可用的海外网络路径;中转连接则使用分配的中转主机和端口。请复制同一模式下的完整字段,不要把原生 IP 与中转端口混用。

MIYAIP 静态代理连接地址、端口、凭据与出口 IP,具体值已遮蔽

MIYAIP 连接详情会分别显示连接地址和出口 IP。原图使用中文标签:原始代理详情、IP 地址、端口、用户名、密码和出口 IP。图中具体数值均已遮蔽。

图片来源:MIYAIP 静态代理接入教程。

3. 先检查端点,再从自己的设备测试

打开 MIYAIP 代理检查器,输入要检查的端点,选择匹配的协议并运行检查。如果失败,请阅读具体原因:超时、连接被拒绝与鉴权错误需要采取不同的修复措施。

检查器从 MIYAIP 的测试服务发起请求,可以提供对端点的另一个观察结果,但不能证明你自己的网络或 Chrome 配置也能访问相同端点。

如需在同一设备测试,请参考 curl 和 Python 连接教程。使用分配的端点、支持的协议和较短的超时限制,将代理测试结果与准备使用的连接进行比较。比较时保持测试目标一致。

如果本地代理应用使用 localhost,应在运行该应用的设备上测试。远程代理检查器无法访问你计算机上的回环地址监听器。

下一步

4. 根据测试结果修改对应设置

结果

下一步操作

无法解析代理主机名

重新复制主机名,并检查它能否在相同网络中解析。不要用控制台其他位置显示的出口 IP 替代

连接被拒绝

确认主机和端口配套。如果地址是本地地址,确认代理应用已启动,并正在该端口监听

连接超时

检查网络路径、原生或中转模式的接入条件,以及端点是否可用。先与另一个允许使用的网络进行比较,或联系服务商支持,再决定是否修改无关的浏览器设置

HTTP 407,或反复提示代理登录

核对代理凭据和鉴权方式。HTTP 响应说明代理已经回答;这与无法连接到代理端口属于不同阶段

本地端点测试成功,但 Chrome 仍然失败

重新检查浏览器选择的代理配置、扩展规则、系统设置或受管理策略,确认 Chrome 使用的端点与成功测试的端点相同

出口 IP 检查成功,但目标网站失败

记录目标状态码或错误消息。检查目标及其访问规则,不要把所有失败都归为同一种代理连接错误

一次修改所有设置会让原因更难定位。每修正一项相关配置,都重新运行相同的小请求。如果错误发生变化,就使用新的错误决定下一步检查。

如果错误变为 ERR_TUNNEL_CONNECTION_FAILED,请继续阅读 HTTPS 代理隧道排错教程,检查 CONNECT 交换、鉴权与目标限制。

5. 修复后验证浏览器线路

  1. 在发生错误时使用的同一个 Chrome 配置和网络中,重新打开受影响的页面。
  2. 在该配置中打开 IP 与浏览器环境检查,查看页面观察到的出口。
  3. 将结果与准备使用的代理比较。固定代理应核对分配的出口;轮换产品则应核对所选地区和会话行为,而不是期待地址永久不变。
  4. 再次打开原始目标。出口 IP 检查成功与目标请求成功回答的是不同问题,应保留两个观察结果。
  5. 恢复排查期间临时修改的扩展或线路,然后在实际准备使用的配置下再次检查浏览器。

如果问题仍然存在,可以向支持人员提供浏览器版本、时间戳、连接模式、已遮蔽敏感内容的主机和端口、准确错误信息,以及同设备测试是否成功。这样既能提供可复现的起点,也不必暴露完整鉴权字符串。

常见问题

常见问题

这个错误是否意味着整个互联网连接都中断了?

不一定。Chrome 可能正在尝试使用无法访问的代理,而其他应用使用不同线路。请检查当前生效的代理设置,并从同一设备测试。

应该关闭代理吗?

只有该设置不再需要、而且预期连接不依赖代理时才应该关闭。如果代理属于工作流程或受管理网络配置,应修正线路,或向管理员索取当前配置。

清除 Cookie 能修复 ERR_PROXY_CONNECTION_FAILED 吗?

Cookie 无法修正错误的代理主机名,也无法让关闭的端口开始监听。应先检查生效的代理设置和端点可达性;只有后续证据指向特定网站问题时,再检查网站数据。

为什么检查器显示代理可用,Chrome 却仍然失败?

检查器和 Chrome 可能使用不同网络、协议或凭据。远程检查器能够访问的端点,本地网络未必能够访问。应从自己的设备比较同一端点,并确认 Chrome 选择的代理配置。

Playwright 中的 net::ERR_PROXY_CONNECTION_FAILED 是另一种错误吗?

这是自动化客户端呈现的 Chromium 连接错误。应检查启动浏览器时提供的代理,以及浏览器运行环境能否访问该端点。容器内的本地地址指向容器自身,不会自动指向宿主机。

HTTP 407 是同一个问题吗?

不是。HTTP 407 是代理鉴权响应。代理已经回答后,应重点检查凭据和支持的鉴权方式。MIYAIP 连接教程介绍了这一排查分支。

检查端点,然后确认线路

通过连接测试检查代理,再从准备执行任务的浏览器配置中验证出口。

下一步

浏览配置教程

运行本地演示

下载 network_demo.py,或将以下完整代码保存为同名文件。使用 Python 3 运行 python network_demo.py。服务仅监听 127.0.0.1:8766,使用完按 Ctrl+C 退出。

"""Local HTTP demonstration. No external requests, credentials or MIYAIP service calls."""
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
from urllib.parse import urlsplit
import json
import time


class DemoHandler(BaseHTTPRequestHandler):
    def log_message(self, *_):
        pass

    def reply(self, code, body=b"", headers=None):
        self.send_response(code)
        for key, value in (headers or {}).items():
            self.send_header(key, value)
        self.send_header("Content-Length", str(len(body)))
        try:
            self.end_headers()
            self.wfile.write(body)
        except (BrokenPipeError, ConnectionResetError, ConnectionAbortedError):
            pass

    def do_CONNECT(self):
        self.reply(407, headers={"Proxy-Authenticate": 'Basic realm="local-demo"'})

    def do_GET(self):
        path = urlsplit(self.path).path
        if path == "/redirect":
            return self.reply(302, headers={"Location": "/headers"})
        if path == "/loop":
            return self.reply(302, headers={"Location": "/loop"})
        if path == "/slow":
            time.sleep(2)
        if path in {"/headers", "/slow"}:
            payload = {"method": self.command, "headers": dict(self.headers)}
            return self.reply(200, json.dumps(payload, indent=2).encode(),
                              {"Content-Type": "application/json"})
        self.reply(404, b"Use /headers, /redirect, /loop or /slow")

    def do_POST(self):
        body = self.rfile.read(int(self.headers.get("Content-Length", "0")))
        if urlsplit(self.path).path == "/redirect307":
            return self.reply(307, headers={"Location": "/headers"})
        if urlsplit(self.path).path == "/redirect302":
            return self.reply(302, headers={"Location": "/headers"})
        payload = {"method": self.command, "headers": dict(self.headers),
                   "body": body.decode("utf-8", errors="replace")}
        self.reply(200, json.dumps(payload, indent=2).encode(),
                   {"Content-Type": "application/json"})


if __name__ == "__main__":
    print("Local demonstration: http://127.0.0.1:8766 (Ctrl+C to stop)", flush=True)
    ThreadingHTTPServer(("127.0.0.1", 8766), DemoHandler).serve_forever()

来源