Apache HttpClient 5.5 には、コネクションマネージャーのソケット設定に SOCKS 構成の経路があります。保守されている例では setSocksProxyAddress を使用します。

InetSocketAddress socks =
    new InetSocketAddress("proxy.example.net", 1080);

PoolingHttpClientConnectionManager manager =
    PoolingHttpClientConnectionManagerBuilder.create()
        .setDefaultSocketConfig(
            SocketConfig.custom()
                .setSocksProxyAddress(socks)
                .build()
        )
        .build();

CloseableHttpClient client = HttpClients.custom()
    .setConnectionManager(manager)
    .build();

この断片は HttpClient 5 の org.apache.hc パッケージと HttpCore の SocketConfig を使用します。このクライアントで行うリクエストは、上で構成したプールを使用します。アプリケーションの所有範囲が終わったらクライアントを閉じてください。

実際のウェブサイトの URL は通常どおりリクエストに設定します。プロキシ認証を伴わない許可された公開サイトへのリクエストでは、SOCKS プロキシ一覧が候補アドレスを提供します。実際のランタイムが対応する SOCKS バージョンを選んでください。SOCKS アドレスはそこへ到達するために使うトランスポートを構成するものであり、HttpHost として渡す HTTP フォワードプロキシの経路ではありません。

これらはこのマネージャーの既定のソケット設定です。ルートごとの SocketConfig リゾルバーを使うアプリケーションは、代わりにそのポリシーを通じて目的の SOCKS 設定を適用すべきです。この例はコネクションマネージャーの通常の宛先 DNS ポリシーを保ちます。リモート名前解決には別途検証済みの構成が必要です。

関連記事