2010-12-01 16 views
9

Si una aplicación utiliza la java.net * rutinas, que pueden configurar un proxy cuando se invoque la aplicación de esta manera:¿Puedo establecer el proxy en la línea de comando cuando se usa org.apache.commons.httpclient? .

java -Dhttp.proxyHost=proxy.server.com -Dhttp.proxyPort=8000 <whatever-the-app-is> 

Sin embargo, tengo una aplicación (que no puedo cambiar) usando org. apache.commons.httpclient para hacer la comunicación http. No especifica un servidor procxy, pero sí utiliza el HttpConnection predeterminado. ¿Hay alguna manera de decirle al cliente apache http desde la línea de comando que use un servidor proxy?

Respuesta

5

Por desgracia, no creo que pueda. La única forma es que la aplicación lea la propiedad del sistema y luego la configure en el objeto DefaultHttpParams.

Eche un vistazo a this thread en el grupo httpclient-user para obtener más información.

+0

Gracias. Esa no es la única forma (puede establecer proxies de otras maneras, pero todas implican cambiar la aplicación, hasta donde puedo ver) –

1

No lo creo. Pero aquí es un código que encontré este código en un viejo proyecto, que debería haber trabajado:

try { 
    String proxyHost = System.getProperty("https.proxyHost"); 
    int proxyPort = 0; 
    try { 
     proxyPort = Integer.parseInt(System.getProperty("https.proxyPort")); 
    } catch (Exception ex) { 
     System.out.println("No proxy port found"); 
    } 

    System.setProperty("java.net.useSystemProxies", "true"); 

    ProxySelector ps = ProxySelector.getDefault(); 
    List<Proxy> proxyList = ps.select(new URI(targetUrl)); 
    Proxy proxy = proxyList.get(0); 
    if (proxy != null) { 
     InetSocketAddress addr = ((InetSocketAddress) proxy.address()); 
     if (addr != null) { 
      proxyHost = addr.getHostName(); 
      proxyPort = addr.getPort(); 
     } 
    } 

    boolean useProxy = proxyHost != null && proxyHost.length() > 0; 

    if (useProxy) { 
     httpClient.getHostConfiguration().setProxy(proxyHost, proxyPort); 
    } 

} catch (Exception ex) { 
    ex.printStackTrace(); 
} 
+0

Gracias. Desafortunadamente, no puedo (fácilmente) cambiar la aplicación, pero quizás deba hacerlo después de todo –

5

Al utilizar el constructor HTTPClient, use el método useSystemProperties() para habilitar los parámetros del proxy JVM -D estándar.
Ver http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/HttpClientBuilder.html#useSystemProperties()

Ejemplo:

CloseableHttpClient httpclient = HttpClients.custom() 
    .useSystemProperties() 
    .build(); 

Ahora usa -Dhttp.proxyHost = 10.0.0.100 -Dhttp.proxyPort = 8800 para configurar el proxy.

Cuestiones relacionadas