使用Java检测Windows / IE代理设置

我需要自动检测用户是否需要代理才能访问互联网。 Java应用程序是否有办法读取系统代理设置?

谢谢,吉米

Java SE 1.5提供了ProxySelector类来检测代理设置。 如果存在与Internet的直接连接,则代理类型将是DIRECT,否则它将返回主机和端口。

以下示例说明了此function:

import java.net.InetSocketAddress; import java.net.Proxy; import java.net.ProxySelector; import java.net.URI; import java.util.Iterator; import java.util.List; public class TestProxy { public static void main(String[] args) { try { System.setProperty("java.net.useSystemProxies","true"); List l = ProxySelector.getDefault().select( new URI("http://www.yahoo.com/")); for (Iterator iter = l.iterator(); iter.hasNext(); ) { Proxy proxy = iter.next(); System.out.println("proxy hostname : " + proxy.type()); InetSocketAddress addr = (InetSocketAddress)proxy.address(); if(addr == null) { System.out.println("No Proxy"); } else { System.out.println("proxy hostname : " + addr.getHostName()); System.out.println("proxy port : " + addr.getPort()); } } } catch (Exception e) { e.printStackTrace(); } } } 

另一个被接受的答案无疑是优秀和正确的,但我想我会在这里添加一些内容……

如果您在配置了“自动检测代理设置”的计算机上,我认为这称为PAC ,那么使用Java gubbins在代码中检测代理的代码将不起作用(它会认为它是“直接”连接)。

有一个名为proxy vole的库(我认为是新的BSD许可证 ),但是,您可以使用,所以这里的其他答案的代码稍作修改即可使用:

 public class testProxy { public static void main(String[] args) { try { System.setProperty("java.net.useSystemProxies","true"); // Use proxy vole to find the default proxy ProxySearch ps = ProxySearch.getDefaultProxySearch(); ps.setPacCacheSettings(32, 1000*60*5); List l = ps.getProxySelector().select( new URI("http://www.yahoo.com/")); //... Now just do what the original did ... for (Iterator iter = l.iterator(); iter.hasNext(); ) { Proxy proxy = (Proxy) iter.next(); System.out.println("proxy hostname : " + proxy.type()); InetSocketAddress addr = (InetSocketAddress) proxy.address(); if(addr == null) { System.out.println("No Proxy"); } else { System.out.println("proxy hostname : " + addr.getHostName()); System.out.println("proxy port : " + addr.getPort()); } } } catch (Exception e) { e.printStackTrace(); } } } 

它需要这些import:

 import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URI; import java.util.Iterator; import java.util.List; import com.btr.proxy.search.ProxySearch; 

哦,这里有代理田鼠的用法示例。