3

我正在尝试基于它构建一个 HTTP 客户端,java.net.http.HttpClient并且我希望对在后台解析的 IP 地址进行一些控制。

我希望这种机制使用请求主机后面的所有 IP 地址。我试图解决的根本问题是尽快对目标 IP 的不可用做出反应。这可以通过对每个 IP 进行主动监控并在发送 HTTP 请求时仅使用可用地址(在 TCP、TLS 或 HTTP 级别)来完成。我还想对所有 IP 之间的流量进行负载平衡,并主动检测 DNS 解析的变化。我正在维护与外部 HTTPS 服务的长期连接。

目前,HTTP java 客户端仅使用一个 IP 地址,并维护连接池以针对该 IP。

通过使用提供给 HTTP 客户端的 URL 中的 IP 地址并使用与预期名称匹配的特定信任管理器来保持 TLS 验证,我已经构建了一个解决方法。它有几个限制。特别是它会更改 HTTP 请求,这可能会影响您收到的响应,具体取决于您的目标服务器。它还强制按您要定位的主机使用一个 HTTP 客户端。我创建了一个小型GitHub 存储库来说明此解决方法。

我探索了一点 HTTP 客户端实现,到目前为止我还没有找到任何方法来实现这种机制。特别是,我被困在jdk.internal.net.http.HttpRequestImpl#getAddress哪个包可见并阻止任何扩展。

这种机制存在于 Jetty HTTP 客户端(请参阅 参考资料org.eclipse.jetty.util.SocketAddressResolver)或 HTTP Apache 客户端中。

有没有我可以用来正确解决此类问题的现有机制?如果没有,有没有办法贡献或提交改进请求?

4

0 回答 0