2012-04-24 20 views
5

No puedo evitar contestar esta pregunta.establecer nonProxyHosts en Apache HttpClient 4.1.3

¿Cómo puedo configurar nonProxyHosts en Apache HttpClient 4.1.3?

En el viejo Httpclient 3.x que era bastante simple. U podría simplemente configurarlo usando los métodos setNonProxyHosts.

Pero ahora, no hay un método equivalente para la nueva versión. He estado buscando a través de api docs, tutoriales y ejemplos y hasta ahora no he encontrado la solución.

Para configurar un proxy normales u sólo puede hacerlo por esto:

HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http"); 
    DefaultHttpClient httpclient = new DefaultHttpClient(); 
    httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); 

¿Alguien sabe si hay un fuera de la solución de caja en la nueva versión 4.1.3 httpclient para la creación de nonProxyHosts o hacer tengo que hacerlo por mi cuenta como

if (targetHost.equals(nonProxyHost) { 
    dont use a proxy 
    } 

Gracias de antemano.

+0

Podría resolver este problema utilizando un proxyselector. – Jools

+0

podría comprometer su solución, me encuentro con el mismo problema. – moohkooh

Respuesta

3

@moohkooh: así es como he resuelto el problema.

DefaultHttpClient client = new DefaultHttpClient(); 

//use same proxy as set in the system properties by setting up a routeplan 
ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner(client.getConnectionManager().getSchemeRegistry(), 
    new LinkCheckerProxySelector()); 
client.setRoutePlanner(routePlanner); 

Y a continuación, su LinkcheckerProxySelector() quisiera algo así.

private class LinkCheckerProxySelector extends ProxySelector { 

@Override 
public List<Proxy> select(final URI uri) { 

    List<Proxy> proxyList = new ArrayList<Proxy>(); 

    InetAddress addr = null; 
    try { 
    addr = InetAddress.getByName(uri.getHost()); 
    } catch (UnknownHostException e) { 
    throw new HostNotFoundWrappedException(e); 
    } 
    byte[] ipAddr = addr.getAddress(); 

    // Convert to dot representation 
    String ipAddrStr = ""; 
    for (int i = 0; i < ipAddr.length; i++) { 
    if (i > 0) { 
     ipAddrStr += "."; 
    } 
    ipAddrStr += ipAddr[i] & 0xFF; 
    } 

//only select a proxy, if URI starts with 10.* 
    if (!ipAddrStr.startsWith("10.")) { 
    return ProxySelector.getDefault().select(uri); 
    } else { 
    proxyList.add(Proxy.NO_PROXY); 
    } 
    return proxyList; 
} 

Así que espero que esto te ayude.

+0

desde 4.0 'ProxySelectorRoutePlanner' está en desuso; doc tell para usar 'SystemDefaultRoutePlanner' en su lugar. De todos modos, voy a sugerir una nueva forma basada en el medio ambiente – boly38

1

Acaba de encontrar this answer. La forma más rápida de hacerlo es establecer planificador de la instalación por defecto como Oleg dijo:

HttpClientBuilder getClientBuilder() { 
    HttpClientBuilder clientBuilder = HttpClientBuilder.create(); 
    SystemDefaultRoutePlanner routePlanner = new SystemDefaultRoutePlanner(null); 
    clientBuilder.setRoutePlanner(routePlanner); 
    return clientBuilder; 
} 

Por defecto null arg se establecerá con ProxySelector.getDefault()

De todos modos se podría definir y personalizar su propio. Otro ejemplo aquí: EnvBasedProxyRoutePlanner.java (gist)

Cuestiones relacionadas