JavaScript または JScript を使った自動プロキシ ファイルの例
ここでは、.pac ファイルを使用して を指定するスクリプトの例を示します。これらの関数を使用するには、プロキシ サーバーの名前、ポート番号、および を変更する必要があります。
注
- isInNet 関数、isResolvable 関数、および dnsResolve 関数は、に対して問い合わせを実行します。
- オブジェクト モデルのオブジェクト、プロパティ、またはメソッドを参照すると、プロキシ自動構成ファイルが異常終了し、メッセージが表示されません。たとえば、window.open(...)、alert(...)、password(...) などのいずれを参照しても、プロキシ自動構成ファイルは Internet Explorer 上で異常終了します。
次の関数は、ホスト名がローカル ホストかどうかをまず調べます。ローカル ホストの場合は、次に直接接続であるかどうかをチェックします。ホスト名がローカル ホストでない場合は、プロキシ サーバー (proxy) を経由して接続します。
function FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT";
else
return "PROXY proxy:80";
}
isPlainHostName 関数は、ホスト名の中にピリオドが含まれているかどうかを調べます。含まれている場合は偽 (False)、含まれていない場合は真 (True) を返します。
次の関数は、ホストが "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";
}
注
- localHostOrDomainIs 関数は、ローカル ドメインの URL に対してだけ実行されます。
- dnsDomainIs 関数は、指定されたドメインがホスト名のドメインと一致すると、真 (True) を返します。
次の関数は、DNS サーバーにホスト名を渡し、名前の解決を要求します。名前を解決できる場合は、直接接続を確立します。解決できない場合は、プロキシ サーバーを経由して接続します。この方法は、内部の DNS サーバーを使用して内部のすべてのホスト名を解決する場合に便利です。
function FindProxyForURL(url, host)
{
if (isResolvable(host))
return "DIRECT";
else
return "PROXY proxy:80";
}
このページの先頭にある isResolvable 関数の注を参照してください。
次の関数は、指定された 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 : すべて無視する)。
次の関数は、ホストがローカルな場合、直接接続します。ホストがローカルでない場合、この関数はホストのドメインに応じて使用するプロキシ サーバーを選択します。この方法は、によってプロキシ サーバーを選択する場合に便利です。
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 では、シェルのコマンドのようなパターンを使用できます。
次の関数は、使用しているプロトコルのタイプを取得し、それに従ってプロキシ サーバーを選択します。一致するプロトコルがない場合は、直接接続します。この方法は、使用しているプロトコルに応じてプロキシ サーバーを選択する場合に便利です。
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 関数は、指定された数の文字を文字列から取り出します。
次の関数は、ホスト名を IP アドレスに変換した後、指定された文字列と比較して、プロキシ サーバーを選択します。
function FindProxyForURL(url, host)
{
if (dnsResolve(host) == "999.99.99.999") { // = http://secproxy
return "PROXY secproxy:8080";
}
else {
return "PROXY proxy:80";
}
}
このページの先頭にある dnsResolve 関数の注を参照してください。
次の関数でも、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 アドレスを、ピリオドで区切った整数の形式で返します。
次の関数は、ホスト名に含まれているピリオドの数を調べます。ホスト名にピリオドが含まれている場合は、プロキシ サーバーを経由して接続します。ピリオドが含まれていない場合は、直接接続します。この方法も、ホスト名の特性に応じて接続のタイプを選択するような方法です。
function FindProxyForURL(url, host)
{
if (dnsDomainLevels(host) > 0) { // if the number of dots in host > 0
return "PROXY proxy:80";
}
return "DIRECT";
}
dnsDomainLevels 関数は、ホスト名に含まれるピリオドの個数を整数で返します。
次の関数では、プロキシ サーバーの使用に適した曜日を指定して接続のタイプを選択します。指定した範囲に含まれない曜日には、直接接続します。この関数は、通信の負荷が高いときにプロキシ サーバーを使用し、負荷が低いときに直接接続するような場合に便利です。
function FindProxyForURL(url, host)
{
if(weekdayRange("WED", "SAT", "GMT"))
return "PROXY proxy:80";
else
return "DIRECT";
}
weekdayRange(day1 [,day2] [,GMT] ) 関数は、パラメータの指定範囲 (day1、day2、および GMT) に現在のシステム時刻が含まれているかどうかを示す値を返します。必須のパラメータは、先頭のパラメータだけです。GMT では、ローカルな時刻ではなく、グリニッジ標準時が時刻として使用されます。
関連項目