Javaでproxy.pacを処理させる簡単な方法 その2
(0)
(0)
(0)
(0)
Total: 0
その1では、ブラウザからプロキシ設定を取得するコードを掲載しましたが、今回はJavaのコントロールパネルの設定を完全に読み取るコードです。
これで、プロキシの対応もバッチリ!(実は、認証付きのプロキシという、高いハードルがあるのですが、そちらはそのうち記事にしたいと思います。。。)
ソースコードはこちらから
ProxyInfoManager.java
JAVA:
-
package com.daisukeyamashita.tools.proxyinfo;
-
-
import java.net.MalformedURLException;
-
import java.net.URL;
-
-
import org.apache.log4j.Logger;
-
-
import com.sun.deploy.config.Config;
-
import com.sun.deploy.net.proxy.BrowserProxyConfig;
-
import com.sun.deploy.net.proxy.BrowserProxyInfo;
-
import com.sun.deploy.net.proxy.DynamicProxyManager;
-
import com.sun.deploy.net.proxy.ProxyConfigException;
-
import com.sun.deploy.net.proxy.ProxyHandler;
-
import com.sun.deploy.net.proxy.ProxyUnavailableException;
-
import com.sun.deploy.services.ServiceManager;
-
-
public class ProxyInfoManager {
-
-
private static final Logger logger = Logger.getLogger(ProxyInfoManager.class);
-
-
-
private static ProxyInfo cacheProxyInfo = null;
-
-
private ProxyInfoManager() {
-
//hidden
-
}
-
-
ProxyConfigException, ProxyUnavailableException {
-
-
if (cacheProxyInfo == null) {
-
}
-
-
return cacheProxyInfo;
-
}
-
-
ProxyUnavailableException {
-
-
int connection = Config.getIntProperty(Config.PROX_TYPE_KEY);
-
-
switch (connection) {
-
-
case Config.PROX_TYPE_BROWSER:
-
logger.info("[SELECT] browser"); //$NON-NLS-1$
-
cacheProxyInfo = getBrowserProxyInfo(url);
-
break;
-
-
case Config.PROX_TYPE_MANUAL:
-
logger.info("[SELECT] manual"); //$NON-NLS-1$
-
-
cacheProxyInfo = new ProxyInfo(host, port, isNotUseLocal, ProxyInfo.ProxyType.MANUAL);
-
break;
-
-
case Config.PROX_TYPE_AUTO:
-
logger.info("[SELECT] auto"); //$NON-NLS-1$
-
cacheProxyInfo = getAutoProxyInfo(url);
-
break;
-
-
case Config.PROX_TYPE_NONE:
-
logger.info("[SELECT] none"); //$NON-NLS-1$
-
cacheProxyInfo = new ProxyInfo();
-
break;
-
-
default:
-
logger.warn("[SELECT] " + connection); //$NON-NLS-1$
-
cacheProxyInfo = new ProxyInfo();
-
break;
-
-
}
-
-
if (logger.isInfoEnabled()) {
-
logger.info("[HOST] " + cacheProxyInfo.getHost()); //$NON-NLS-1$
-
logger.info("[PORT] " + cacheProxyInfo.getPort()); //$NON-NLS-1$
-
if (ProxyInfo.ProxyType.MANUAL.equals(cacheProxyInfo.getProxyType())) {
-
logger.info("[LOCAL] " + cacheProxyInfo.isNotUseLocal()); //$NON-NLS-1$
-
}
-
}
-
-
return cacheProxyInfo;
-
}
-
-
ProxyUnavailableException {
-
-
logger.info("[OS] Windows"); //$NON-NLS-1$
-
com.sun.deploy.services.ServiceManager
-
.setService(com.sun.deploy.services.PlatformType.STANDALONE_TIGER_WIN32);
-
} else {
-
logger.info("[OS] Not Windows"); //$NON-NLS-1$
-
com.sun.deploy.services.ServiceManager
-
.setService(com.sun.deploy.services.PlatformType.STANDALONE_TIGER_UNIX);
-
}
-
-
BrowserProxyConfig bpc = ServiceManager.getService().getProxyConfig();
-
BrowserProxyInfo bpi = bpc.getBrowserProxyInfo();
-
-
ProxyHandler handler = ServiceManager.getService().getAutoProxyHandler();
-
logger.info("[proxy.pac path] " + bpi.getAutoConfigURL()); //$NON-NLS-1$
-
handler.init(bpi);
-
logger.info("[check host] " + url.toString()); //$NON-NLS-1$
-
-
com.sun.deploy.net.proxy.ProxyInfo[] pi = handler.getProxyInfo(url);
-
ProxyInfo proxyInfo = null;
-
if (pi.length> 0) {
-
com.sun.deploy.net.proxy.ProxyInfo info = pi[0];
-
proxyInfo = new ProxyInfo(info.getProxy(), info.getPort(), ProxyInfo.ProxyType.BROWSER);
-
}
-
-
return proxyInfo;
-
}
-
-
-
logger.info("[proxy.pac path] " + Config.getProperty(Config.PROX_AUTOCFG_KEY)); //$NON-NLS-1$
-
-
DynamicProxyManager.reset();
-
logger.info("[check host] " + url.toString()); //$NON-NLS-1$
-
com.sun.deploy.net.proxy.ProxyInfo pi = DynamicProxyManager.getProxyInfo(url);
-
ProxyInfo proxyInfo = new ProxyInfo(pi.getProxy(), pi.getPort(), ProxyInfo.ProxyType.AUTO);
-
return proxyInfo;
-
}
-
-
}
ProxyInfo.java
JAVA:
-
package com.daisukeyamashita.tools.proxyinfo;
-
-
public class ProxyInfo {
-
-
public enum ProxyType {
-
BROWSER, MANUAL, AUTO, NONE
-
}
-
-
private final int port;
-
private final ProxyType type;
-
private final boolean isNotUseLocal;
-
-
ProxyInfo() {
-
this("", -1, false, ProxyType.NONE); //$NON-NLS-1$
-
}
-
-
this(host, port, false, type);
-
}
-
-
this.host = host;
-
this.port = port;
-
this.isNotUseLocal = isNotUseLocal;
-
this.type = type;
-
}
-
-
return host;
-
}
-
-
public int getPort() {
-
return port;
-
}
-
-
public ProxyType getProxyType() {
-
return type;
-
}
-
-
public boolean isNotUseLocal() {
-
return isNotUseLocal;
-
}
-
}


メールで購読