¿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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta