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、アプリケーションの応答は分けて扱ってください。コネクターが提供するのは経路であり、宛先の資格情報やプロトコルの結果ではありません。

関連記事