setproxy proxyhost configuracion code behind abrir java proxy

proxyhost - proxy in java



¿El ProxySelector de Java no funciona con scripts de configuración automática de proxy? (4)

Quiero que mi programa Java use la configuración proxy del sistema. En consecuencia, utilicé el código que se encuentra en muchos lugares, como esta respuesta , para configurar java.net.useSystemProxies en true y llamar a ProxySelector.getDefault().select(...) para descubrir el proxy para el host en particular que deseo alcanzar. Esto funciona bien cuando he configurado un único servidor proxy explícito en las Propiedades de Internet. Pero si he establecido "Usar secuencia de comandos de configuración automática", siempre devuelve el "proxy" DIRECTO.

Sé que el script funciona, ya que mi navegador puede acceder a los hosts para los que devuelve un servidor proxy y, sin el conjunto de scripts, no puede. Incluso traté de simplificar el script a sus principios más simples:

function FindProxyForURL(url, host) { return "PROXY my.proxy.mydomain:3128"; }

y funciona en mi navegador, pero ProxySelector.getDefault().select(...) todavía devuelve solo DIRECT.

¿Me estoy perdiendo de algo? (Esto es en Java 1.6 y Windows 7, si importa).


Como ya lo sugirió Mads Hansen, ¡ Proxy-Vole hace el truco!

Solo necesita agregar el archivo jar del sitio de descarga a su classpath (se incluyen los dlls) y este código me ayudó a configurar las configuraciones de proxy:

ProxySearch proxySearch = new ProxySearch(); proxySearch.addStrategy(Strategy.OS_DEFAULT); proxySearch.addStrategy(Strategy.JAVA); proxySearch.addStrategy(Strategy.BROWSER); ProxySelector proxySelector = proxySearch.getProxySelector(); ProxySelector.setDefault(proxySelector); URI home = URI.create("http://www.google.com"); System.out.println("ProxySelector: " + proxySelector); System.out.println("URI: " + home); List<Proxy> proxyList = proxySelector.select(home); if (proxyList != null && !proxyList.isEmpty()) { for (Proxy proxy : proxyList) { System.out.println(proxy); SocketAddress address = proxy.address(); if (address instanceof InetSocketAddress) { String host = ((InetSocketAddress) address).getHostName(); String port = Integer.toString(((InetSocketAddress) address).getPort()); System.setProperty("http.proxyHost", host); System.setProperty("http.proxyPort", port); } } }


No, el ProxySelector de Java no lee los archivos de configuración automática de proxy (PAC) .

Sin embargo, como lo sugirió Brian de Alwis como respuesta a mi pregunta similar, la biblioteca Proxy Vole parece proporcionar ese soporte / capacidad.

Para proporcionar conectividad de red fuera de la caja para su aplicación Java, puede usar la biblioteca Proxy - Vole. Proporciona algunas estrategias para la autodetección de la configuración del proxy actual. Hay muchas estrategias configurables para elegir. En este momento, Proxy - Vole admite las siguientes estrategias de detección de proxy.

  • Leer la configuración de la plataforma (Soporta: Windows, KDE, Gnome, OSX)
  • Leer la configuración del navegador (Compatible con Firefox 3.x, Internet Explorer; Chrome y Webkit usan la configuración de la plataforma)
  • Leer variables de entorno (variables de uso frecuente en sistemas de servidor Linux / Unix)
  • Secuencia de comandos de detección automática mediante WPAD / PAC (no se admiten todas las variaciones)

Podría cargar un archivo de configuración automática de proxy (PAC) en Java. Por favor, consulte a continuación los códigos y el paquete. Espero que esto sea lo que estabas buscando:

import com.sun.deploy.net.proxy.*; . . BrowserProxyInfo b = new BrowserProxyInfo(); b.setType(ProxyType.AUTO); b.setAutoConfigURL("http://yourhost/proxy.file.pac"); DummyAutoProxyHandler handler = new DummyAutoProxyHandler(); handler.init(b); URL url = new URL("http://host_to_query"); ProxyInfo[] ps = handler.getProxyInfo(url); for(ProxyInfo p : ps){ System.out.println(p.toString()); }

¡Ya tiene un paquete [com.sun.deploy.net.proxy] en su máquina! Encuentra [deploy.jar]; D


Puedes usar Proxy Vole para resolver este problema:

Si sabe exactamente qué archivo PAC desea utilizar, puede hacer lo siguiente:

UrlPacScriptSource source = new UrlPacScriptSource("http://www.example.org/proxy.pac"); PacProxySelector selector = new PacProxySelector(source); ProxySelector.setDefault(selector);

La ventaja de esto es que no está relacionado con el usuario. Por ejemplo, si ejecuta esto como un servicio de Windows, puede terminar ejecutándolo en el usuario SISTEMA que puede no tener la misma configuración de proxy OS_DEFAULT (si corresponde) que el usuario administrador.

El enfoque que utiliza los valores del sistema / software es:

ProxySearch proxySearch = new ProxySearch(); proxySearch.addStrategy(Strategy.OS_DEFAULT); proxySearch.addStrategy(Strategy.BROWSER); proxySearch.addStrategy(Strategy.JAVA); ProxySelector proxySelector = proxySearch.getProxySelector(); ProxySelector.setDefault(proxySelector);

Esto comienza con OS_DEFAULT , luego JAVA y, por último, BROWSER como estrategias para el selector de proxy.

Este código se basa en el código de GitHub, versión de lanzamiento 1.0.3.