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