tengo solucion saber que iniciar example descargar configurar configuracion como actualizar abrir java proxy jvm

java - solucion - Configurando JVM/JRE para usar Windows Proxy automáticamente



iniciar java (5)

Encontré un comportamiento extraño experimentar con el código sugerido aquí.

Parece que, después de haber configurado un ProxySelector predeterminado, el código de socket normal (por ejemplo, crear un nuevo Socket) ya no funciona, porque intenta usar un servidor de calcetines (no estoy seguro de por qué lo haría, pero para mí sí) .

Entonces si tú, cuando llamas

Socket socket = new Socket(host, port);

usted recibe tal SocketException:

java.net.SocketException: Malformed reply from SOCKS server at java.net.SocksSocketImpl.readSocksReply(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source)

luego intente volver a establecer el ProxySelector predeterminado en nulo:

ProxySelector.setDefault(null);

Para mí, esto dio como resultado la siguiente clase pequeña de Java que ahora utilizo para recuperar simplemente la configuración del proxy del sistema sin que afecte el uso posterior de Sockets () de la aplicación, pero configurando el sistema correctamente para usar el proxy:

public class ProxyConfig { private static String host; private static int port; public static void init() { System.setProperty("java.net.useSystemProxies", "true"); Proxy proxy = getProxy(); if (proxy != null) { InetSocketAddress addr = (InetSocketAddress) proxy.address(); host = addr.getHostName(); port = addr.getPort(); System.setProperty("java.net.useSystemProxies", "false"); System.setProperty("http.proxyHost", host); System.setProperty("http.proxyPort", ""+port); } System.setProperty("java.net.useSystemProxies", "false"); } public static String getHost() { return host; } public static int getPort() { return port; } private static Proxy getProxy() { List<Proxy> l = null; try { ProxySelector def = ProxySelector.getDefault(); l = def.select(new URI("http://foo/bar")); ProxySelector.setDefault(null); } catch (Exception e) { e.printStackTrace(); } if (l != null) { for (Iterator<Proxy> iter = l.iterator(); iter.hasNext();) { java.net.Proxy proxy = iter.next(); return proxy; } } return null; } }

Vi la pregunta sobre cómo configurar el proxy para la JVM, pero lo que quiero preguntar es cómo se puede utilizar el proxy que ya está configurado (en Windows).

Aquí hay una demostración de mi problema:

  1. Vaya a su Panel de control-> Java y establezca una dirección proxy.
  2. Ejecute el siguiente código de applet simple (estoy usando el IDE de Eclipse):

import java.awt.Graphics; import javax.swing.JApplet; import java.util.*; public class Stacklet extends JApplet { private String message; public void init(){ Properties props = System.getProperties(); message = props.getProperty("http.proxyHost", "NONE"); message = (message.length() == 0)? "NONE": message; } public void paint(Graphics g) { g.drawString(message, 20, 20); } }

El Applet muestra "NINGUNO" sin tener en cuenta la configuración que ha colocado en el Panel de control de Java. Lo que sería mejor sería si la configuración del proxy de Windows (generalmente configurada en Internet Explorer) fuera lo que yo pudiera determinar, pero realizar un paso de configuración adicional en el Panel de control de Java sería una solución aceptable.

¡Gracias!


Es posible detectar el proxy utilizando la clase ProxySelector y asignar el proxy del sistema asignando variables de entorno con el método setProperty de la clase System :

System.setProperty("java.net.useSystemProxies", "true"); System.out.println("detecting proxies"); List l = null; try { l = ProxySelector.getDefault().select(new URI("http://foo/bar")); } catch (URISyntaxException e) { e.printStackTrace(); } if (l != null) { for (Iterator iter = l.iterator(); iter.hasNext();) { java.net.Proxy proxy = (java.net.Proxy) iter.next(); System.out.println("proxy type: " + proxy.type()); InetSocketAddress addr = (InetSocketAddress) proxy.address(); if (addr == null) { System.out.println("No Proxy"); } else { System.out.println("proxy hostname: " + addr.getHostName()); System.setProperty("http.proxyHost", addr.getHostName()); System.out.println("proxy port: " + addr.getPort()); System.setProperty("http.proxyPort", Integer.toString(addr.getPort())); } } }


Esto podría ser un poco tarde, pero me encuentro con el mismo problema. La forma en que lo arreglé es usando -Djava.net.useSystemProxies = verdadero como argumentos jvm.

"Tenga en cuenta que esta propiedad se verifica solo una vez al inicio".

Esta propiedad está configurada al inicio, por lo que no cambiará cuando ejecute su aplicación.

Espero que esto ayude.

Referencia: https://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html


java.net.URL.openStream() es una abreviatura de java.net.URL.openConnection().getInputStream() .


ACTUALIZACIÓN: necesita tener la propiedad del sistema java.net.useSystemProxies establecida en true para que mi solución a continuación funcione.

Si usa java.net.URL.openStream() para obtener un InputStream para el contenido de recursos web, automáticamente obtendrá el mismo proxy que utilizaría Internet Explorer para esa URL.

No es necesario ir al Panel de control de Java o mostrar el proxy utilizado.