web-dev-qa-db-ja.com

非推奨のhttpClient.getParams()をRequestConfigに置き換えるにはどうすればよいですか?

コードを継承しました

_import org.Apache.http.client.HttpClient;
...
HttpClient httpclient = createHttpClientOrProxy();
...



private HttpClient createHttpClientOrProxy() {
    HttpClient httpclient = new DefaultHttpClient();

    /*
     * Set an HTTP proxy if it is specified in system properties.
     * 
     * http://docs.Oracle.com/javase/6/docs/technotes/guides/net/proxies.html
     * http://hc.Apache.org/httpcomponents-client-ga/httpclient/examples/org/Apache/http/examples/client/ClientExecuteProxy.Java
     */
    if( isSet(System.getProperty("http.proxyHost")) ) {
        int port = 80;
        if( isSet(System.getProperty("http.proxyPort")) ) {
            port = Integer.parseInt(System.getProperty("http.proxyPort"));
        }
        HttpHost proxy = new HttpHost(System.getProperty("http.proxyHost"), port, "http");
// @Deprecated methods here... getParams() and ConnRoutePNames
        httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
    }
    return httpclient;
}
_

httpClient.getParams()は@非推奨であり、「

_HttpParams  getParams()
Deprecated. 
(4.3) use RequestConfig.
_

RequestConfigのクラスドキュメントはなく、getParams()および_ConnRoutePNames.DEFAULT_PROXY_を置き換えるためにどのメソッドを使用する必要があるかわかりません。

18

Apache HttpClient 4.2コードでApache HttpClient 4.3ライブラリを使用しています。

GetParams()とConnRoutePNamesだけが非推奨のメソッドではないことに注意してください。 DefaultHttpClientクラス自体は4.2の実装に依存しており、4.3でも非推奨です。

ここ4.3のドキュメント( http://hc.Apache.org/httpcomponents-client-4.3.x/tutorial/html/connmgmt.html#d5e47 )に関しては、この方法で書き直すことができます:

private HttpClient createHttpClientOrProxy() {

    HttpClientBuilder hcBuilder = HttpClients.custom();

    // Set HTTP proxy, if specified in system properties
    if( isSet(System.getProperty("http.proxyHost")) ) {
        int port = 80;
        if( isSet(System.getProperty("http.proxyPort")) ) {
            port = Integer.parseInt(System.getProperty("http.proxyPort"));
        }
        HttpHost proxy = new HttpHost(System.getProperty("http.proxyHost"), port, "http");
        DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy);
        hcBuilder.setRoutePlanner(routePlanner);
    }

    CloseableHttpClient httpClient = hcBuilder.build();

    return httpClient;
}
10

これは、@ Stephane Lallemagneによる回答のフォローアップです。

HttpClientにシステムプロキシ設定を選択させる多くの簡潔な方法があります。

CloseableHttpClient client = HttpClients.custom()
        .setRoutePlanner(
             new SystemDefaultRoutePlanner(ProxySelector.getDefault()))
        .build();

または、システムのデフォルトで完全に構成されたHttpClientのインスタンスが必要な場合

CloseableHttpClient client = HttpClients.createSystem();
13
ok2c