使用 Reactor Netty 配置 Spring WebClient 代理
通过 WebClient 的连接器提供一个已配置代理的 Reactor Netty 客户端,并考虑其基于 CONNECT 的代理行为。
HttpClient httpClient = HttpClient.create()
.proxy(proxy -> proxy.type(ProxyProvider.Proxy.HTTP)
.host("203.0.113.10").port(8080));
WebClient client = WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient))
.build();
使用这个 WebClient 发起调用。对于允许的公共代理路由上的公共服务,HTTP 代理列表提供主机和端口候选;确认到实际目的地的 CONNECT 访问。HttpClient/ProxyProvider 类型属于 Reactor Netty,而不是 Java 的标准客户端。另一个注入的 WebClient 可以保留另一个连接器。
Reactor Netty 文档中记录的 Netty HTTP 代理路径无论目的地 scheme 如何都使用 CONNECT。因此,即使代理在那里接受普通的转发 HTTP,普通 HTTP 目标也可能需要到其端口的隧道许可。在更改 URL 的 scheme 之前,先阅读代理的实际响应。对于需要普通 HTTP/1.1 转发的兼容 Spring 6.2 部署,Jetty 12.0.35 连接器示例提供了这种替代方案。
对于 JVM 属性路由,选择 Reactor Netty 文档中记录的 opt-in 配置。JVM 中存在的属性并不会配置每一个连接器。
将代理设置/身份验证、目的地 TLS 和应用程序响应分开。连接器提供路由,而不是目的地的凭据或协议结果。