10

我的 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->Java)上设置了我的代理脚本,但结果相同。而且我发现无法以编程方式为 Java 设置 PAC 文件。

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

4

4 回答 4

9

哇!我可以在 Java 上加载代理自动配置 (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

于 2012-06-08T15:27:05.983 回答
2

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

于 2012-06-07T20:07:23.903 回答
1

就我而言,我刚刚弄清楚 .pac 文件将返回什么,然后进行硬编码。

于 2013-11-25T00:21:56.777 回答
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());
    }
于 2016-04-29T11:22:22.607 回答