在 Apache HttpClient 5 的 Fluent API 中,Request 可以选择代理,而 Executor 负责提供其账户。请通过该带凭据的对象执行请求:

HttpHost proxy = new HttpHost("http", "proxy.example", 8080);
Executor executor = Executor.newInstance()
    .auth(proxy, proxyUser, proxyPassword.toCharArray());

String body = executor.execute(
        Request.get("https://www.example.com/").viaProxy(proxy))
    .returnContent()
    .asString();

Executor 和 Request 来自 org.apache.hc.client5.http.fluent;HttpHost 来自 org.apache.hc.core5.http。账户变量来自应用的配置。

两处代理用法有意描述同一个主机和端口。viaProxy 选择路由,而 auth 为该中间人向 Executor 注册凭据。如果最终结果仍为 407,请将所选路由与凭据作用域进行对比。

调用另一个 Request 的便捷 execute 方法会走另一条执行路径。如示例所示,应让带凭据的 Executor 始终附着在该操作上,这样收到质询的客户端才拥有已配置的账户。

示例使用 5.x 的 char-array 密码接口。较早的 HttpClient 4 Fluent 片段使用不同的包和方法签名。请求完成后,returnContent 会消费响应实体并释放连接以供复用。

相关文章