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 プロキシ経路は、宛先のスキームに関係なく CONNECT を使用します。そのため、プロキシがそこで通常の転送 HTTP を受け付ける場合でも、単純な HTTP 宛先はそのポートへのトンネル許可を必要とすることがあります。URL のスキームを変更する前に、実際のプロキシ応答を確認してください。通常の HTTP/1.1 転送を必要とする互換性のある Spring 6.2 デプロイでは、Jetty 12.0.35 コネクターの例がその代替を提供します。
JVM プロパティによるルーティングでは、Reactor Netty のドキュメントに記載されたオプトイン構成を選択してください。JVM に存在するプロパティがすべてのコネクターを構成するわけではありません。
プロキシの設定/認証、宛先の TLS、アプリケーションの応答は分けて扱ってください。コネクターが提供するのは経路であり、宛先の資格情報やプロトコルの結果ではありません。