如何从Java中的系统设置中获取代理设置

如何从Java中的系统设置中获取代理设置,java,networking,proxy,Java,Networking,Proxy,我正在研究如何在Windows下用Java获取系统代理信息,但我只找到了一种方法。但这对我不起作用 public static void main(String[] args) throws Throwable { System.setProperty("java.net.useSystemProxies", "true"); System.out.println("detecting proxies"); List<Proxy> pl = ProxySelector.g

我正在研究如何在Windows下用Java获取系统代理信息,但我只找到了一种方法。但这对我不起作用

public static void main(String[] args) throws Throwable {
  System.setProperty("java.net.useSystemProxies", "true");
  System.out.println("detecting proxies");
  List<Proxy> pl = ProxySelector.getDefault().select(new URI("http://ihned.cz/"));
  for (Proxy p : pl)
    System.out.println(p);
  Proxy p = null;
  if (pl.size() > 0) //uses first one
    p = pl.get(0);
  System.out.println(p.address());
  System.out.println("Done");
}

Java的意思是,我直接位于互联网上。但这是错误的。我支持代理。我无法获得计算机的解决方案。

正如我们在评论中所讨论的,代理设置仅适用于您使用的一些浏览器


如果希望Java使用相同的设置,则需要手动将其放入Java网络设置中(查看网页了解详细信息)。

多亏了Dacwe。问题是,浏览器不使用任何系统代理,但它使用脚本自行设置代理。因此,系统中没有任何代理,Java无法访问它们。

首先检查windows是否真正了解您的代理:
netsh winhttp show proxy
(这列出了Java在您的示例中使用的系统范围的代理)它说
未找到以下命令:winhttp
那么您如何知道您在代理后面?它是http代理吗?你的浏览器里有吗?有。浏览器(MSIE甚至Firefox)使用脚本进行自动设置。这可能是原因吗?MSIE与Windows紧密相连,但设置很可能只应用于浏览器,而不是整个环境。例如!它仅用于浏览器。请注意,这仅适用于在浏览器容器中执行的小程序。它不适用于独立代码,就像在OP提供的代码示例中执行的一样。您对自己问题的回答实际上是正确的。java代码不考虑浏览器设置(因为它不是小程序)。它最多将使用windows控制面板中Internet属性(LAN设置按钮)中设置的系统默认设置(假设您使用的是windows主机)。更多信息,请参阅。