Wie bekomme ich eine Verbindung ohne Proxy in Java?

Wie vermeide ich dasProxySelector beim Herstellen einer Verbindung mitURLConnection oder eher, wie man eine Verbindung garantiert, die frei von allen Proxies ist, die Java kennt?

Ich dachte, das war was Proxy.NO_PROXY war für. Zitat aus dem Javadoc:

Eine Proxy-Einstellung, die eine DIRECT-Verbindung darstellt und dem Protokoll-Handler im Grunde sagt, dass kein Proxy verwendet werden soll

Eine solche Verbindung wird jedoch weiterhin über den ProxySelector hergestellt. Ich verstehe es nich

Ich habe einen kleinen Test gemacht, um meinen Standpunkt zu beweisen:

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();
}

und ein Dummy-ProxySelector, der nur protokolliert, was gerade passiert:

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) {}
}

welche druckt:

"MyProxySelector called with URI = socket://foobar.com:80"

(Beachten Sie, wie sich das Protokoll von @ geändert hahttp zusocket)

Ich kann meinen ProxySelector natürlich so erstellen, dass er immer @ zurückgiProxy.NO_PROXY wenn das URI Schema @ isocket aber ich denke, es würde Gelegenheiten geben, in denen es einen SOCKS-Proxy auf der Site gibt, und dann wäre es nicht wahr.

Lassen Sie mich die Frage noch einmal wiederholen: Ich brauche eine Möglichkeit, um sicherzustellen, dass ein bestimmtesURLConnection verwendet keinen Proxy, unabhängig davon, welche Systemeigenschaften festgelegt wurden oder welcher ProxySelector installiert ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage