import java.net.InetSocketAddress;
import org.apache.hc.core5.reactor.IOReactorConfig;
import org.apache.hc.client5.http.impl.async.HttpAsyncClients;

var reactor = IOReactorConfig.custom()
    .setSocksProxyAddress(new InetSocketAddress("proxy.example", 1080))
    .build();
var client = HttpAsyncClients.custom()
    .setIOReactorConfig(reactor)
    .build();
client.start();

必要な非同期リクエストはこのクライアントから送り、本来の接続先 URI はそのままにします。処理が続く間はクライアントを維持し、終了後に閉じてください。許可された公開先へのリクエストには、SOCKS プロキシリストからホストとポートの候補を選べます。reactor が対応する SOCKS バージョンに合わせてください。

この非同期ソケットの経路を制御するのは reactor です。HTTP の HttpHost プロキシルートや、従来型接続マネージャーの SocketConfig は別のインターフェースです。

対応する SOCKS のユーザー名・パスワード認証を使う場合は、reactor の builder に setSocksProxyUsername と setSocksProxyPassword も設定します。リクエストの実行中に共有設定を変えず、start の前に設定を終えてください。

関連記事