Javaでproxy.pacを処理させる簡単な方法 その1 at ミネルヴァの梟は黄昏とともに飛び始める

ミネルヴァの梟は黄昏とともに飛び始める

Follow me on Twitter: http://www.twitter.com/dddaisuke

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

without comments

 ネットワークプログラミングをする場合、ローカルアプリケーションでは考えられないような問題が発生します。

 企業での利用を想定したビジネスアプリで最初に問題になるのが、プロキシやファイアーウォールだと思います。特に大企業になると、拠点毎にプロキシが分れており、proxy.pacと呼ばれるJavaScriptで記述されたファイルをブラウザに設定し、動的にプロキシを切り替える運用が行われております。

 JavaにもWindowsのコントロールパネルに設定パネルがあり、プロキシの設定ができるのですが、普通の手順ではJavaプログラムからこの設定を呼び出す事ができません。また、Sunの公式サイトも情報がありませんでした。

 Java Appletでは、この情報が使われているのは明らかなので、JDKのソースコードを読めば分かると思いがんばって読んでみる事に。。。

 その結果、どうやらJRE_HOME/libにあるdeploy.jarを利用すると良いという事が分りました。以下のコードでブラウザからプロキシの設定を取得する事ができます。当然、proxy.pacもパースすることができ、「ローカル(file:///)」や「ネットワーク(http://)」にファイルが設置されていても読み込めます。

ソースコードはこちらから

        if (System.getProperty("os.name").indexOf("Windows") != -1) { //$NON-NLS-1$ //$NON-NLS-2$
            com.sun.deploy.services.ServiceManager
                    .setService(com.sun.deploy.services.PlatformType.STANDALONE_TIGER_WIN32);
        } else {
            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();
        handler.init(bpi);

        com.sun.deploy.net.proxy.ProxyInfo[] pi = handler.getProxyInfo(url);

つづく。

Written by daisuke

5月 28th, 2008 at 8:40 pm

Posted in Java

Leave a Reply