setproxy proxyhost configuracion code behind abrir java eclipse junit proxy system-properties

proxyhost - proxy in java



Puede detectar la configuraciĆ³n de Proxy del sistema en la aplicaciĆ³n Java, pero no en JUnit (3)

intente hacer una configuración de TestRunner (haga clic con el botón derecho / RunAs ...) con los siguientes parámetros de VM:

-Dhttp.proxyHost=<YOUR_PROXY> -Dhttp.proxyPort=<YOUR_PORT> -Dhttp.nonProxyHosts=<IF YOU NEED THIS (pipe as separator)> -Dhttp.proxyUser=<YOUR_NAME> -Dhttp.proxyPassword=<YOUR_PASWORD>

  • Windows 7
  • Java 1.8.0_45
  • Eclipse Mars

Si tiene un proxy del sistema configurado en HTTP, a continuación solo se imprimirá HTTP si se ejecuta desde el método main de la aplicación Java.

Sin embargo, si se llama desde la prueba JUnit 4 (en eclipse), siempre se imprime DIRECT .

También se señala que definir -Djava.net.useSystemProxies=true en eclipse: ejecutar configuraciones -> Argumentos -> argumentos de máquina virtual. La prueba simplemente se cuelga.

¿Alguna idea de lo que está pasando?

Muchas gracias,

public void printSystemProxy() { System.setProperty("java.net.useSystemProxies", "true"); try { final List<Proxy> list = ProxySelector.getDefault().select(new URI("http://foo/bar")); for (final Proxy proxy : list) { System.out.println(proxy.type()); } } catch (final URISyntaxException e) { throw new IllegalStateException(e); } }


No puede cambiar el comportamiento del proxy del sistema de Java en el tiempo de ejecución. La propiedad del sistema java.net.useSystemProxies solo se lee en el inicio. De la documentación (énfasis agregado):

java.net.useSystemProxies (predeterminado: falso)

En los sistemas recientes de Windows y en los sistemas Gnome 2.x es posible decirle a la pila de java.net, estableciendo esta propiedad como verdadera, usar la configuración de proxy del sistema (ambos sistemas le permiten establecer proxies globalmente a través de su interfaz de usuario). Tenga en cuenta que esta propiedad se verifica solo una vez al inicio.

Establecer la propiedad del sistema sobre la marcha no cambiará el comportamiento. Tienes que enviarlo como un argumento de JVM usando -D como lo estás haciendo con tu método main . Una alternativa sería no utilizar los proxies del sistema y, en cambio, permitir que el usuario proporcione los suyos.

Alternativamente, las otras propiedades de proxy como http.proxyHost , http.proxyPort , etc. (enumeradas en el enlace de documentación anterior) se pueden modificar después de que se haya iniciado la aplicación. Dependiendo de su aplicación, esta puede ser una solución mejor, ya que generalmente tendrá un mejor soporte multiplataforma.


La configuración de proxy que establezca en Eclipse afectará a todas las herramientas, incluidas Eclipse y Maven. Esta podría ser la razón por la cual tuviste un ''cuelgue'' ... podría no haber sido tu prueba de JUnit, pero el propio maven colgando (necesita aclaración).

Sin embargo, en este caso, me parece que puede cambiar las Propiedades del sistema desde el complemento responsable de las pruebas JUnit:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration> <systemPropertyVariables> <java.net.useSystemProxies>true</java.net.useSystemProxies> </systemPropertyVariables> </configuration> </plugin>

[ACTUALIZAR]

En algunos casos, la propiedad del sistema solo se usa al inicio, y solo funciona cuando la configura en la línea de comando. En ese caso, puede proporcionarlo como parte de los argumentos de la línea de comando :

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration> <argLine>-Djava.net.useSystemProxies=true</argLine> </configuration> </plugin>

También tenga en cuenta que si desea ejecutarlo desde dentro de maven, debe elegir ''Ejecutar como -> Prueba de Maven'', y no ''Ejecutar como -> Prueba de JUnit''.

[RATINGING sigue]

Odio decir esto, pero en este punto el soporte para Proxies es realmente pobre dentro de Java.

Se ha realizado una mejora importante: ahora puede definir un Proxy por separado para cada conexión que desee establecer. Sin embargo, creo que esto debería mejorarse mucho:

  1. Autenticación separada por proxy. Ahora bien, aunque puedo definir el proxy por conexión, no es natural usar la misma autenticación para todos. Peor aún, incluso desencadena la misma autenticación para proxy y conexión HTTP: no es capaz de distinguir estos dos pares.
  2. Mejor soporte para proxies SOCKS
  3. Mejor soporte para consultar el sistema para la configuración del proxy. Todos los sistemas operativos modernos ahora tienen una configuración para el proxy predeterminado.
  4. Compatibilidad incorporada y API para servidores de socket reales.

¡Suena como un programador desilusionado, pero la respuesta está en la implementación de estos! ¿Es esto digno de un JEP?