如何在Java中使用自动代理配置脚本

我的Internet Explorer设置为具有用于Web访问的自动代理文件(所谓的PAC)。 有没有办法在我的Java程序中使用它呢?

我的Java代码似乎根本不使用代理。

ArrayList ar = new ArrayList(ProxySelector.getDefault().select(new URI("http://service.myurlforproxy.com"))); for(Proxy p : ar){ System.out.println(p.toString()); //output is just DIRECT TT it should be PROXY. } 

我还在Java控制面板(Control-> Java)上设置了我的代理脚本,但结果相同。 我发现没有办法以编程方式为Java设置PAC文件。

人们使用http.proxyHost作为System.setProperties(..),但这仅用于设置代理主机,而不是代理脚本(PAC文件)。

哇! 我可以在Java上加载Proxy Auto-Config(PAC)文件。 请参阅以下代码和包装。

 import com.sun.deploy.net.proxy.*; . . BrowserProxyInfo b = new BrowserProxyInfo(); b.setType(ProxyType.AUTO); b.setAutoConfigURL("http://yourhost/proxy.file.pac"); DummyAutoProxyHandler handler = new DummyAutoProxyHandler(); handler.init(b); URL url = new URL("http://host_to_query"); ProxyInfo[] ps = handler.getProxyInfo(url); for(ProxyInfo p : ps){ System.out.println(p.toString()); } 

您的计算机上已经有[com.sun.deploy.net.proxy]包了! 找[deploy.jar]; D.

Java没有任何内置支持来解析JS PAC文件。 你只能靠自己。 您可以做的是下载该文件并从中解析代理主机。 你应该读这个 。

根据@Jaeh的答案我使用下面的代码。 请注意, SunAutoProxyHandler实现了AbstractAutoProxyHandler,并且有一个名为PluginAutoProxyHandler的替代具体实现,但该实现看起来并不健壮:

  BrowserProxyInfo b = new BrowserProxyInfo(); b.setType(ProxyType.AUTO); b.setAutoConfigURL("http://example.com/proxy.pac"); SunAutoProxyHandler handler = new SunAutoProxyHandler(); handler.init(b); ProxyInfo[] ps = handler.getProxyInfo(new URL(url)); for(ProxyInfo p : ps){ System.out.println(p.toString()); } 

在我的情况下,我只是想出了.pac文件将返回什么,然后硬编码。