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

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

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

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

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

有任何想法吗?

最佳答案

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

故事还在继续:
上述方法仅适用于 Eclipse。如果我双击 jar ,我会得到“本地端没有收到传入的连接!”。原因不是因为我使用的 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())

关于java - 获取系统代理设置不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14588320/

相关文章:

gradle - 我没有代理,但 Gradle 说 "Connect to 127.0.0.1:8888 [/127.0.0.1] failed",即使在删除 ~/.gradle 之后

nginx - 使用 proxy_pass 配置 Nginx 的两个位置

configuration - 如何使用 Charles Proxy 通过 https 启用 Map Local?

spring - 将代理与 HttpComponentsClientHttpRequestFactory 和 RestTemplate 一起使用

java - 弹出 AlertDialog 时显示键盘

java脚本与mozilla rhino和内存管理问题

java - JSP上传文件

java - 解析跨越 12 个月数据的没有年份的日期