web-dev-qa-db-ja.com

コードを変更せずに、環境変数またはJVM引数によってhttpClientにプロキシを使用させる方法

Http.proxyHostとhttp.proxyPortの設定はhttpClientには役に立たないことがわかりました。環境変数またはVM引数またはコードを変更せずにそれらのようなものによってプロキシを使用するようにhttpClientを強制する方法?

32
user496949
21
Krystian Nowak

HTTPクライアント(私の場合はv 4.5.1)は、次のようなシステムプロキシを使用できます。

HttpClient httpClient = HttpClientBuilder.create().useSystemProperties().build();
//or 
HttpClient httpClient = HttpClients.createSystem();
11
wangf

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を使用しています。

6
michal.kreuzman

私の知る限り、コードを変更せずにこれを管理することはできませんが、独自の接続マネージャーを使用してネイティブの動作に近づけることができます。参照 ProxySelectorがURLのスキームをhttps://からsocket://に変更

0