获取系统代理设置不起作用

时间:2013-01-29 17:10:35

标签: java proxy proxyselector

我使用此代码来获取Java中的系统代理:

System.setProperty("java.net.useSystemProxies", "true");
    List<Proxy> list = null;
    try
    {
        list = ProxySelector.getDefault().select(new URI("http://google.com"));
    }
    catch (final URISyntaxException e)
    {
        e.printStackTrace();
    }

但“list”仅包含DIRECT,但不包含我在Internet Explorer中设置的设置。奇怪的是,在早期版本的软件中,完全相同的代码会返回正确的系统代理列表。

有谁知道什么可能使代码无法正常工作?

我添加了一些本地库,这是我唯一能想到的。但我仍然不知道这会如何影响这段代码。我在一个小测试应用程序中,在同一个eclipse环境等中测试了相同的代码,并且它可以工作。但是当我在我的应用程序中调试相同的代码时,列表只包含DIRECT

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

本机库是问题所在。我使用NativeSwing,在Swing中嵌入了一个WebBrowser。在执行NativeInterface.open()或NativeInterface.initialize()时,代理设置会更改,之后无法更改。 因此,我现在阅读代理设置并将它们保存到静态字段。然后,当我需要它们时,我会从这个静态字段中读取它们。

故事仍在继续: 上述方法仅适用于Eclipse。如果我双击罐子,我得到“本机方没有收到传入的连接!”。原因不是因为我使用的是NativeInterface,而是与java处理系统代理设置的方式有关。

我发现了这篇文章:http://ideen2011.blogspot.de/2011/08/java-proxyselector-usesystemproxies-and.html

简而言之:使用ProxySelector.setDefault(null);如果你想要套接字连接不受系统代理等的影响。至少这对我有帮助,但我仍然试图理解,后台到底发生了什么。

2015年的故事仍在继续: 之前提到的方法导致了这个问题:JavaFX webview set Proxy

所以我建议而不是

ProxySelector.setDefault(null)

使用

ProxySelector.setDefault(ProxySelector.getDefault())