exclude - Detectando la configuración del proxy de Windows/IE usando Java
proxy java example (2)
Necesito detectar automáticamente si un usuario requiere un proxy para acceder a Internet. ¿Hay una manera para que una aplicación Java lea la configuración del proxy del sistema?
Gracias Jimmy
Java SE 1.5 proporciona la clase ProxySelector para detectar la configuración del proxy. Si hay una conexión directa a Internet, el tipo de Proxy será DIRECTO; de lo contrario, devolverá el host y el puerto.
El siguiente ejemplo ilustra esta funcionalidad:
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.URI;
import java.util.Iterator;
import java.util.List;
public class TestProxy {
public static void main(String[] args) {
try {
System.setProperty("java.net.useSystemProxies","true");
List<Proxy> l = ProxySelector.getDefault().select(
new URI("http://www.yahoo.com/"));
for (Iterator<Proxy> iter = l.iterator(); iter.hasNext(); ) {
Proxy proxy = iter.next();
System.out.println("proxy hostname : " + proxy.type());
InetSocketAddress addr = (InetSocketAddress)proxy.address();
if(addr == null) {
System.out.println("No Proxy");
} else {
System.out.println("proxy hostname : " + addr.getHostName());
System.out.println("proxy port : " + addr.getPort());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
La other respuesta, aceptada, es sin duda excelente y correcta, pero pensé que agregaría algo aquí ...
Si está en una máquina que está configurada con "configuración de proxy de detección automática", que creo que se llama PAC , el código para detectar el proxy en la respuesta utilizando los gubbins de Java no funcionará (pensará que es un "directo" conexión).
Sin embargo, hay una biblioteca llamada proxy vole (nueva licencia BSD , creo) que puede usar, así que aquí está el código de la other respuesta ligeramente modificado para usar eso:
public class testProxy {
public static void main(String[] args) {
try {
System.setProperty("java.net.useSystemProxies","true");
// Use proxy vole to find the default proxy
ProxySearch ps = ProxySearch.getDefaultProxySearch();
ps.setPacCacheSettings(32, 1000*60*5);
List l = ps.getProxySelector().select(
new URI("http://www.yahoo.com/"));
//... Now just do what the original did ...
for (Iterator iter = l.iterator(); iter.hasNext(); ) {
Proxy proxy = (Proxy) iter.next();
System.out.println("proxy hostname : " + proxy.type());
InetSocketAddress addr = (InetSocketAddress)
proxy.address();
if(addr == null) {
System.out.println("No Proxy");
} else {
System.out.println("proxy hostname : " +
addr.getHostName());
System.out.println("proxy port : " +
addr.getPort());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Necesita estas importaciones:
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URI;
import java.util.Iterator;
import java.util.List;
import com.btr.proxy.search.ProxySearch;
Ah, y hay ejemplos de uso para el servidor proxy here .