web-dev-qa-db-fra.com

Comment remplacer httpClient.getParams () obsolète par RequestConfig?

J'ai hérité du code

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() est @Deprecated et lit "

HttpParams  getParams()
Deprecated. 
(4.3) use RequestConfig.

Il n'y a pas de documentation de classe pour RequestConfig et je ne sais pas quelle méthode doit être utilisée pour remplacer getParams() et ConnRoutePNames.DEFAULT_PROXY.

18
peter.murray.rust

Vous utilisez la bibliothèque Apache HttpClient 4.3 avec le code Apache HttpClient 4.2.

Veuillez noter que getParams () et ConnRoutePNames ne sont pas les seules méthodes obsolètes dans votre cas. La classe DefaultHttpClient elle-même repose sur l'implémentation 4.2 et est également déconseillée dans 4.3.

En ce qui concerne la documentation 4.3 ici ( http://hc.Apache.org/httpcomponents-client-4.3.x/tutorial/html/connmgmt.html#d5e47 ), vous pouvez la réécrire de cette façon :

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

Il s'agit plus d'un suivi de la réponse donnée par @Stephane Lallemagne

Il existe un moyen beaucoup plus concis de faire en sorte que HttpClient récupère les paramètres du proxy système

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

ou ceci si vous voulez une instance de HttpClient entièrement configurée avec les valeurs par défaut du système

CloseableHttpClient client = HttpClients.createSystem();
13
ok2c