You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium与BrowserMob无法连接HTTPS端口问题求助

问题分析

你的代码在HTTP环境下正常运行,但HTTPS环境中浏览器报ERR_PROXY_CONNECTION_FAILED错误,结合curl能正常访问的情况,核心问题大概率是BrowserMobProxy连接外部HTTPS代理时未指定正确协议,同时存在部分冗余配置导致冲突。

解决方案

以下是针对性的代码修改和配置调整:

1. 指定链式代理的HTTPS协议

BrowserMobProxy默认用HTTP协议连接链式代理,但你的外部代理是HTTPS类型,必须显式指定协议:
在setChainedProxy后添加一行代码:

proxy.setChainedProxyProtocol(ProxyProtocol.HTTPS);

2. 移除冗余的代理配置

ClientUtil.createSeleniumProxy(proxy)已经自动生成包含HTTP和HTTPS代理的完整配置,无需手动调用setHttpProxy和setSslProxy,重复设置会导致配置冲突。

3. 添加Chrome必要启动参数

为Chrome添加忽略代理证书错误的参数,避免MITM(中间人)过程中的SSL验证拦截:

options.addArguments("--ignore-certificate-errors");
options.addArguments("--ignore-ssl-errors");
修改后的完整代码
implementation 'org.seleniumhq.selenium:selenium-java:4.5.0'
implementation 'net.lightbody.bmp:browsermob-core:2.1.5'

public static BrowserMobProxyServer createLocalProxy(String hostname, String port,
                                                     String username, String password) {
    BrowserMobProxyServer proxy = new BrowserMobProxyServer();

    // 信任所有服务器
    proxy.setTrustAllServers(true);
    // 设置链式代理地址
    proxy.setChainedProxy(new InetSocketAddress(hostname, Integer.parseInt(port)));
    // 指定链式代理为HTTPS协议
    proxy.setChainedProxyProtocol(ProxyProtocol.HTTPS);
    // 设置链式代理基础认证
    proxy.chainedProxyAuthorization(username, password, AuthType.BASIC);
    // 配置MITM管理器
    proxy.setMitmManager(ImpersonatingMitmManager.builder().trustAllServers(true).build());

    // 启动本地代理(自动分配端口)
    proxy.start(0);
    return proxy;
}

// 代理设置
BrowserMobProxy proxy = createLocalProxy("<proxy hostname>", "<proxy HTTPS port>", "<user name>", "<password>");

// 由ClientUtil自动生成正确的Selenium代理配置
Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);

// 添加Chrome必要参数
options.addArguments("--ignore-certificate-errors");
options.addArguments("--ignore-ssl-errors");

options.setProxy(seleniumProxy);
WebDriver driver = new ChromeDriver(options);
额外验证点
  • 确认外部代理端口为HTTPS专用端口(通常是443或自定义SSL端口),不要与HTTP端口混淆。
  • 可添加BrowserMobProxy日志排查连接问题:
// 在创建proxy后添加日志配置
LoggingHandler loggingHandler = new LoggingHandler(Level.INFO);
proxy.addLastHttpFilterFactory(new LoggingFilter(loggingHandler));
proxy.addLastHttpsFilterFactory(new LoggingFilter(loggingHandler));

内容的提问来源于stack exchange,提问作者ykg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:50:31