Javaでproxy.pacを処理させる簡単な方法 その2

add to hatena hatena.comment (0) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 0

 その1では、ブラウザからプロキシ設定を取得するコードを掲載しましたが、今回はJavaのコントロールパネルの設定を完全に読み取るコードです。

 これで、プロキシの対応もバッチリ!(実は、認証付きのプロキシという、高いハードルがあるのですが、そちらはそのうち記事にしたいと思います。。。)

ソースコードはこちらから
ProxyInfoManager.java

JAVA:
  1. package com.daisukeyamashita.tools.proxyinfo;
  2.  
  3. import java.net.MalformedURLException;
  4. import java.net.URL;
  5.  
  6. import org.apache.log4j.Logger;
  7.  
  8. import com.sun.deploy.config.Config;
  9. import com.sun.deploy.net.proxy.BrowserProxyConfig;
  10. import com.sun.deploy.net.proxy.BrowserProxyInfo;
  11. import com.sun.deploy.net.proxy.DynamicProxyManager;
  12. import com.sun.deploy.net.proxy.ProxyConfigException;
  13. import com.sun.deploy.net.proxy.ProxyHandler;
  14. import com.sun.deploy.net.proxy.ProxyUnavailableException;
  15. import com.sun.deploy.services.ServiceManager;
  16.  
  17. public class ProxyInfoManager {
  18.  
  19.     private static final Logger logger = Logger.getLogger(ProxyInfoManager.class);
  20.  
  21.     private static final String CHECK_URL = "http://www.適当なホストを指定.com"; //$NON-NLS-1$
  22.  
  23.     private static ProxyInfo cacheProxyInfo = null;
  24.  
  25.     private ProxyInfoManager() {
  26.         //hidden
  27.     }
  28.  
  29.     public static final ProxyInfo getProxyInfo() throws MalformedURLException,
  30.             ProxyConfigException, ProxyUnavailableException {
  31.  
  32.         if (cacheProxyInfo == null) {
  33.             cacheProxyInfo = getDynamicProxyInfo(new URL(CHECK_URL));
  34.         }
  35.  
  36.         return cacheProxyInfo;
  37.     }
  38.  
  39.     private static ProxyInfo getDynamicProxyInfo(URL url) throws ProxyConfigException,
  40.             ProxyUnavailableException {
  41.  
  42.         int connection = Config.getIntProperty(Config.PROX_TYPE_KEY);
  43.  
  44.         switch (connection) {
  45.  
  46.         case Config.PROX_TYPE_BROWSER:
  47.             logger.info("[SELECT] browser"); //$NON-NLS-1$
  48.             cacheProxyInfo = getBrowserProxyInfo(url);
  49.             break;
  50.  
  51.         case Config.PROX_TYPE_MANUAL:
  52.             logger.info("[SELECT] manual"); //$NON-NLS-1$
  53.             String host = Config.getProperty(Config.PROX_HTTP_HOST_KEY);
  54.             int port = Integer.parseInt(Config.getProperty(Config.PROX_HTTP_PORT_KEY));
  55.             boolean isNotUseLocal = Boolean.parseBoolean(Config.getProperty(Config.PROX_LOCAL_KEY));
  56.  
  57.             cacheProxyInfo = new ProxyInfo(host, port, isNotUseLocal, ProxyInfo.ProxyType.MANUAL);
  58.             break;
  59.  
  60.         case Config.PROX_TYPE_AUTO:
  61.             logger.info("[SELECT] auto"); //$NON-NLS-1$
  62.             cacheProxyInfo = getAutoProxyInfo(url);
  63.             break;
  64.  
  65.         case Config.PROX_TYPE_NONE:
  66.             logger.info("[SELECT] none"); //$NON-NLS-1$
  67.             cacheProxyInfo = new ProxyInfo();
  68.             break;
  69.  
  70.         default:
  71.             logger.warn("[SELECT] " + connection); //$NON-NLS-1$
  72.             cacheProxyInfo = new ProxyInfo();
  73.             break;
  74.  
  75.         }
  76.  
  77.         if (logger.isInfoEnabled()) {
  78.             logger.info("[HOST] " + cacheProxyInfo.getHost()); //$NON-NLS-1$
  79.             logger.info("[PORT] " + cacheProxyInfo.getPort()); //$NON-NLS-1$
  80.             if (ProxyInfo.ProxyType.MANUAL.equals(cacheProxyInfo.getProxyType())) {
  81.                 logger.info("[LOCAL] " + cacheProxyInfo.isNotUseLocal()); //$NON-NLS-1$
  82.             }
  83.         }
  84.  
  85.         return cacheProxyInfo;
  86.     }
  87.  
  88.     private static ProxyInfo getBrowserProxyInfo(URL url) throws ProxyConfigException,
  89.             ProxyUnavailableException {
  90.  
  91.         if (System.getProperty("os.name").indexOf("Windows") != -1) { //$NON-NLS-1$ //$NON-NLS-2$
  92.             logger.info("[OS] Windows"); //$NON-NLS-1$
  93.             com.sun.deploy.services.ServiceManager
  94.                     .setService(com.sun.deploy.services.PlatformType.STANDALONE_TIGER_WIN32);
  95.         } else {
  96.             logger.info("[OS] Not Windows"); //$NON-NLS-1$
  97.             com.sun.deploy.services.ServiceManager
  98.                     .setService(com.sun.deploy.services.PlatformType.STANDALONE_TIGER_UNIX);
  99.         }
  100.  
  101.         BrowserProxyConfig bpc = ServiceManager.getService().getProxyConfig();
  102.         BrowserProxyInfo bpi = bpc.getBrowserProxyInfo();
  103.  
  104.         ProxyHandler handler = ServiceManager.getService().getAutoProxyHandler();
  105.         logger.info("[proxy.pac path] " + bpi.getAutoConfigURL()); //$NON-NLS-1$
  106.         handler.init(bpi);
  107.         logger.info("[check host] " + url.toString()); //$NON-NLS-1$
  108.  
  109.         com.sun.deploy.net.proxy.ProxyInfo[] pi = handler.getProxyInfo(url);
  110.         ProxyInfo proxyInfo = null;
  111.         if (pi.length> 0) {
  112.             com.sun.deploy.net.proxy.ProxyInfo info = pi[0];
  113.             proxyInfo = new ProxyInfo(info.getProxy(), info.getPort(), ProxyInfo.ProxyType.BROWSER);
  114.         }
  115.  
  116.         return proxyInfo;
  117.     }
  118.  
  119.     private static ProxyInfo getAutoProxyInfo(URL url) {
  120.  
  121.         logger.info("[proxy.pac path] " + Config.getProperty(Config.PROX_AUTOCFG_KEY)); //$NON-NLS-1$
  122.  
  123.         DynamicProxyManager.reset();
  124.         logger.info("[check host] " + url.toString()); //$NON-NLS-1$
  125.         com.sun.deploy.net.proxy.ProxyInfo pi = DynamicProxyManager.getProxyInfo(url);
  126.         ProxyInfo proxyInfo = new ProxyInfo(pi.getProxy(), pi.getPort(), ProxyInfo.ProxyType.AUTO);
  127.         return proxyInfo;
  128.     }
  129.  
  130. }

ProxyInfo.java

JAVA:
  1. package com.daisukeyamashita.tools.proxyinfo;
  2.  
  3. public class ProxyInfo {
  4.  
  5.     public enum ProxyType {
  6.         BROWSER, MANUAL, AUTO, NONE
  7.     }
  8.  
  9.     private final String host;
  10.     private final int port;
  11.     private final ProxyType type;
  12.     private final boolean isNotUseLocal;
  13.  
  14.     ProxyInfo() {
  15.         this("", -1, false, ProxyType.NONE); //$NON-NLS-1$
  16.     }
  17.  
  18.     ProxyInfo(String host, int port, ProxyType type) {
  19.         this(host, port, false, type);
  20.     }
  21.  
  22.     ProxyInfo(String host, int port, boolean isNotUseLocal, ProxyType type) {
  23.         this.host = host;
  24.         this.port = port;
  25.         this.isNotUseLocal = isNotUseLocal;
  26.         this.type = type;
  27.     }
  28.  
  29.     public String getHost() {
  30.         return host;
  31.     }
  32.  
  33.     public int getPort() {
  34.         return port;
  35.     }
  36.  
  37.     public ProxyType getProxyType() {
  38.         return type;
  39.     }
  40.  
  41.     public boolean isNotUseLocal() {
  42.         return isNotUseLocal;
  43.     }
  44. }

Leave a Comment

名前:

E-mail:

Website:

Comment: