我的Internet Explorer设置为具有用于Web访问的自动代理文件(所谓的PAC)。有没有办法在我的Java程序中使用它呢?
我的Java代码似乎根本不使用代理。
ArrayList<Proxy> ar = new ArrayList<Proxy>(ProxySelector.getDefault().select(new URI("http://service.myurlforproxy.com")));
for(Proxy p : ar){
System.out.println(p.toString()); //output is just DIRECT T.T it should be PROXY.
}
我还在Java控制面板(Control-&gt; Java)上设置了我的代理脚本,但结果相同。 我发现没有办法以编程方式为Java设置PAC文件。
人们使用http.proxyHost for System.setProperties(..)但这仅用于设置代理主机,而不是代理脚本(PAC文件)。
答案 0 :(得分:8)
哇!我可以在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
答案 1 :(得分:2)
Java没有任何内置支持来解析JS PAC文件。你只能靠自己。您可以做的是下载该文件并从中解析代理主机。你应该阅读this。
答案 2 :(得分:1)
在我的情况下,我刚刚想出了.pac文件将返回什么,然后硬编码。
答案 3 :(得分:1)
根据@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());
}