JavaScript または JScript を使った自動プロキシ ファイルの例

例 1 ~例 10 の 10 個のスクリプトは、.pac ファイルを使って自動プロキシ URL を指定する方法を示しています。ここで紹介する関数を使うには、プロキシ サーバーの名前、ポート番号、および IP アドレスを変更する必要があります。

注意

例 1 - ローカル ホストは直接接続し、それ以外はプロキシ サーバーを経由して接続する。

次の関数は、ホスト名がローカル ホストかどうかをまず調べます。ローカル ホストの場合は、次に直接接続であるかどうかをチェックします。ホスト名がローカル ホストでない場合は、プロキシ サーバー (proxy) を経由して接続します。

function FindProxyForURL(url, host)
    {
        if (isPlainHostName(host))
            return "DIRECT";
        else
            return "PROXY proxy:80";
    }

isPlainHostName() 関数は、ホスト名の中にピリオドが含まれているかどうかを調べます。含まれている場合は偽 (False)、含まれていない場合は真 (True) を返します。

例 2 - ファイヤウォールの内側にあるホストは直接接続し、外側にあるローカル サーバーはプロキシを経由して接続する。

次の関数は、ホストが "plain" (ホスト名にドメイン名が含まれていない) かどうか、またホスト名が "www" および "home" 以外で特定のドメイン (.company.com) の一部になっているかどうかを調べます。

function FindProxyForURL(url, host)
    {
        if ((isPlainHostName(host) ||
             dnsDomainIs(host, ".company.com")) &&
            !localHostOrDomainIs(host, "www.company.com") &&
            !localHostOrDoaminIs(host, "home.company.com"))

            return "DIRECT";
        else
            return "PROXY proxy:80; PROXY proxy:80";
    }

注意

例 3 - ホスト名の名前解決が可能な場合は直接接続し、不可能な場合はプロキシ サーバーを経由して接続する。

次の関数は、DNS サーバーにホスト名を渡し、名前の解決を要求します。名前を解決できる場合は直接接続し、解決できない場合はプロキシ サーバーを経由して接続します。この方法は、内部の DNS サーバーを使って内部のすべてのホスト名を解決する場合に便利です。

function FindProxyForURL(url, host)
    {
        if (isResolvable(host))
            return "DIRECT";
        else
            return "PROXY proxy:80";
    }

このページの先頭にある isResolvable() 関数の注意を参照してください。

例 4 - 指定したサブネットの中にホストがある場合は直接接続し、それ以外の場合はプロキシ サーバーを経由して接続する。

次の関数は、指定された IP アドレスを、パターンおよびマスクを使用して、ホスト名と比較します。この方法を使うと、サブネット内の特定のホストは直接接続し、それ以外の場合はプロキシ サーバーを経由して接続することができます。

function FindProxyForURL(url, host)
    {
        if (isInNet(host, "999.99.9.9", "255.0.255.0"))
            return "DIRECT";
        else
            return "PROXY proxy:80";
    }

このページの先頭にある isInNet() 関数に関する注意を参照してください。

指定されたパターンとホストの IP アドレスが一致すると、isInNet(host, pattern, mask) 関数は真 (True) を返します。この mask では、IP アドレスの中のどの部分を照合するのかを指定します (255: すべて照合する、0: すべて無視する)。

例 5 - ホストのドメインに基づいて接続のタイプを決定する。

次の関数は、ホストがローカルな場合、直接接続します。それ以外の場合は、ホストのドメインに応じて使用するプロキシ サーバーを選びます。この方法は、ホストのドメイン名によってプロキシ サーバーを選ぶ場合に便利です。

function FindProxyForURL(url, host)
    {
        if (isPlainHostName(host))
            return "DIRECT";
        else if (shExpMatch(host, "*.com"))
            return "PROXY comproxy:80";
        else if (shExpMatch(host, "*.edu"))
            return "PROXY eduproxy:80";
        else
            return "PROXY proxy";
    }

shExpMatch(str, shexp) 関数は、str が shexp の条件に一致すると真 (True) を返します。shexp では、シェルのコマンドのようなパターンを使用できます。

例 6 - 使用するプロトコルに基づいて接続のタイプを選ぶ。

次の関数は、使用しているプロトコルのタイプを取得し、それに従ってプロキシ サーバーを選びます。一致するプロトコルがない場合は、直接接続します。この方法は、使用しているプロトコルに応じてプロキシ サーバーを選ぶ場合に便利です。

function FindProxyForURL(url, host)
    {
	    if (url.substring(0, 5) == "http:") {
		return "PROXY proxy:80";
	    }
	    else if (url.substring(0, 4) == "ftp:") {
		return "PROXY fproxy:80";
	    }
	    else if (url.substring(0, 7) == "gopher:") {
		return "PROXY gproxy";
	    }
	    else if (url.substring(0, 6) == "https:") {
		return "PROXY secproxy:8080";
	    }
	    else {
		return "DIRECT";
	    }
    }

substring() 関数は、指定された数の文字を文字列から取り出します。

例 7 - ホスト名が IP アドレスと一致するかどうかを調べ、プロキシの設定値を決定する。

次の関数は、ホスト名を IP アドレスに変換した後、指定された文字列と比較して、プロキシ サーバーを選びます。

function FindProxyForURL(url, host)
    {
	    if (dnsResolve(host) == "999.99.99.999") {  // = http://secproxy
		return "PROXY secproxy:8080";
	    }
	    else {
		return "PROXY proxy:80";
	    }
    }
	

このページの先頭にある dnsResolve() 関数に関する注意を参照してください。

例 8 - 指定した IP アドレスとホストの IP アドレスが一致する場合はプロキシ サーバーを経由して接続し、一致しない場合は直接接続する。

次の関数でも、IP アドレスに応じてプロキシ サーバーを選びます。ただし、例 7 とは異なり、関数呼び出しにより IP アドレスを数値として明示的に取得します。例 7 では、dnsResolve() 関数を使い、ホスト名を IP アドレス (数値) に変換しています。

function FindProxyForURL(url, host)
    {
	    if (myIpAddress() == "999.99.999.99") { 
		return "PROXY proxy:80";
	    }
	    else {
		return "DIRECT";
	    }
    }

myIpAddress() 関数は、ブラウザが動作しているホストの IP アドレスを、ピリオドで区切った整数の形式で返します。

例 9 - ホスト名にピリオドが含まれている場合はプロキシ サーバーを経由して接続し、含まれていない場合は直接接続する。

次の関数は、ホスト名に含まれているピリオドの数を調べます。ホスト名にピリオドが含まれている場合は、プロキシ サーバーを経由して接続します。ピリオドが含まれていない場合は、直接接続します。この方法も、ホスト名の特性に応じて接続のタイプを選ぶような方法です。

function FindProxyForURL(url, host)
    {
	    if (dnsDomainLevels(host) > 0) {  // if the number of dots in host > 0
		return "PROXY proxy:80";
	    }
		return "DIRECT";
    }

dnsDomainLevels() 関数は、ホスト名に含まれるピリオドの個数を整数で返します。

例 10 - 指定した曜日はプロキシ サーバーを経由して接続し、それ以外の曜日は直接接続する。

次の関数では、プロキシ サーバーの使用に適した曜日を指定して接続のタイプを選びます。指定した範囲に含まれない曜日には、プロキシ サーバーを経由せずに直接接続します。この関数は、通信の負荷が高いときにプロキシ サーバーを使い、負荷が低いときに直接接続するような場合に便利です。

function FindProxyForURL(url, host)
    {
	if(weekdayRange("WED", "SAT", "GMT")) 
	  return "PROXY proxy:80";
	else 
	  return "DIRECT";
    }

weekdayRange( <day1> [,<day2>] [,<fGMT>] ) 関数は、パラメータの指定範囲 (<day1>、<day2>、および <fGMT>) に現在のシステム時刻が含まれているかどうかを示す値を返します。必須のパラメータは、先頭のパラメータだけです。また、GMT を指定すると、ローカルな時刻ではなく、GMT 時刻 (グリニッジ標準時) が時刻として使われます。

注意
パラメータ <day1> とパラメータ <day2> に同じ値を指定してこの関数を呼び出した場合、以前のバージョンの Microsoft Internet Explorer では、Netscape Navigator* と結果が異なります。具体的に言うと、以前のバージョンの Internet Explorer では 1 週間と解釈されますが、Microsoft Internet Explorer 4.0 および Netscape Navigator* では該当する 1 日だけと解釈されます。たとえば、月曜日に weekdayRange("TUE", "TUE") という関数を呼び出すと、以前のバージョンの Internet Explorer では真 (True) が返されますが、Microsoft Internet Explorer 4.0 および Netscape Navigator* では偽 (False) が返されます。