Http.proxyHostとhttp.proxyPortの設定はhttpClientには役に立たないことがわかりました。環境変数またはVM引数またはコードを変更せずにそれらのようなものによってプロキシを使用するようにhttpClientを強制する方法?
in https://issues.Apache.org/jira/browse/HTTPCLIENT-1128
SystemDefaultHttpClientがverに追加されました。 4.2
HTTPクライアント(私の場合はv 4.5.1)は、次のようなシステムプロキシを使用できます。
HttpClient httpClient = HttpClientBuilder.create().useSystemProperties().build();
//or
HttpClient httpClient = HttpClients.createSystem();
client.getHostConfiguration().setProxy(Host, port)
メソッドを使用して、自分でHttpClient
にプロキシを強制できます。私は通常、HttpClient
の周りにラッパークラスを作成し、このクラスを初期化するときに、任意のソース(環境変数...)からプロキシをセットアップします。
HttpClient
に直接プロキシを設定できない状況でJava.net.ProxySelector.setDefault(new MyProxySelector())
を使用しました。独自のProxySelectorクラスを実装する必要があり、メソッドselectは要求されたURIに基づいてプロキシを選択します。 url-> proxyマッピングを作成して、特定のURIアドレスを必要なプロキシに設定するか、要求されたすべてのURIに対して1つのプロキシをグローバルに返すことができます。
HttpClientソースコードで確認できるように、プロキシのみのsetProxyメソッドを構成する方法は他にありません。 commons-httpclient-3.1を使用しています。
私の知る限り、コードを変更せずにこれを管理することはできませんが、独自の接続マネージャーを使用してネイティブの動作に近づけることができます。参照 ProxySelectorがURLのスキームをhttps://からsocket://に変更