【问题标题】:How to get proxy settings from system settings in Java如何从 Java 中的系统设置中获取代理设置
【发布时间】:2011-08-20 01:56:53
【问题描述】:

我正在寻找如何在 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");
}

当我运行程序时,我得到:

detecting proxies
DIRECT
null
Done

Java 意味着,我直接位于互联网上。但这是错误的。我在代理后面。我无法为我的计算机找到解决方案。

【问题讨论】:

  • 首先检查windows是否真的知道你的代理:netsh winhttp show proxy(这列出了java在你的例子中使用的系统范围的代理)
  • 上面写着Following command was not found: winhttp
  • 那你怎么知道你在代理后面呢?它是http代理吗?你的浏览器里有吗?
  • 是的,我愿意。浏览器(MSIE 甚至 Firefox)使用脚本进行自动设置。可能是这个原因吗? MSIE 与 Windows 紧密相连,但设置很可能仅适用于浏览器,而不适用于整个环境。
  • 没错!它只是用于浏览器。

标签: java networking proxy


【解决方案1】:

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

【讨论】:

  • 您对自己问题的回答实际上是正确的答案。您的 Java 代码不考虑浏览器设置(因为它不是小程序)。它最多将使用 Windows 控制面板的 Internet 属性(LAN 设置按钮)中设置的系统默认设置(假设您使用的是 Windows 主机)。请参阅another article 了解更多信息。
【解决方案2】:

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

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

【讨论】:

  • 请注意,这仅适用于小程序,因为它在浏览器的容器中执行。它不适用于在 OP 提供的代码示例中执行的独立代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多