¿Cómo obtener una conexión sin proxy en Java?
¿Cómo evito pasar por elProxySelector
al hacer una conexión conURLConnection
o más bien, ¿cómo obtener una conexión garantizada libre de cualquier proxy que Java conozca?
Pensé que esto era lo queProxy.NO_PROXY Fue por. Citando del Javadoc:
Una configuración de proxy que representa una conexión DIRECTA, que básicamente le dice al controlador de protocolo que no use ningún proxy
Sin embargo, dicha conexión seguirá a través del ProxySelector. No lo entiendo ??
Hice una pequeña prueba para demostrar mi punto:
public static void main(String[] args) throws MalformedURLException, IOException {
ProxySelector.setDefault(new MyProxySelector());
URL url = new URL("http://foobar.com/x1/x2");
URLConnection connection = url.openConnection(Proxy.NO_PROXY);
connection.connect();
}
y un ProxySelector ficticio que no hace más que registrar lo que está sucediendo:
public class MyProxySelector extends ProxySelector {
@Override
public List<Proxy> select(URI uri) {
System.out.println("MyProxySelector called with URI = " + uri);
return Collections.singletonList(Proxy.NO_PROXY);
}
@Override
public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {}
}
que imprime:
"MyProxySelector called with URI = socket://foobar.com:80"
(Tenga en cuenta cómo ha cambiado el protocolo dehttp
asocket
)
Por supuesto, puedo crear mi ProxySelector de tal manera que siempre regreseProxy.NO_PROXY
si el esquema URI essocket
pero supongo que habrá ocasiones en las que haya un proxy SOCKS en el sitio y luego no sea cierto.
Permítanme repetir la pregunta: necesito una manera de asegurarme de queURLConnection
no utiliza un proxy, independientemente de qué propiedades del sistema se puedan configurar o qué ProxySelector esté instalado.