import org.htmlunit.ProxyConfig;
import org.htmlunit.WebClient;

try (WebClient browser = new WebClient()) {
    ProxyConfig proxy =
        new ProxyConfig("proxy.example.net", 8080, "http");
    proxy.addHostsToProxyBypass("localhost");
    browser.getOptions().setProxyConfig(proxy);

    browser.getPage("https://example.net/");
}

在导航前加载页面的 WebClient 上设置 ProxyConfig。这里使用的是 org.htmlunit 命名空间;较旧的依赖使用 com.gargoylesoftware.htmlunit,可能提供不同的构造函数。

对于这个公开页面示例,把代理主机和整数端口替换为 HTTP 代理列表 中无需认证的候选。构造函数的 "http" 描述的是中间人,即使是 HTTPS 页面也一样。不要把 URL 前缀放进主机名参数,也不要仅仅为了匹配目标而更改协议。

绕过值是正则表达式,而不是 PAC 规则,也不是以逗号分隔的环境列表。如果某个请求意外地直接发出,请把请求的主机与这些模式进行比对,并确认它使用的是这个 WebClient。

单独创建的 WebClient 或 HTTP 客户端不会继承这个配置对象。应在它们开始工作前配置可复用的实例,而不是在并发请求周围更改全局状态。目标校验和网站登录仍然是分开的;使用认证代理还需要所安装 HtmlUnit 版本提供的凭据接口。例如,HtmlUnit 4.21.0 按主机和端口限定代理凭据的范围。

相关文章