Следующие сценарии дают примеры использования PAC-файла для задания URL-адреса автопрокси. Чтобы использовать эти функции, нужно изменить имена прокси, номера портов и IP-адреса. Этот раздел содержит:
- Пример 1. Локальные
узлы подключаются напрямую, все остальные - через прокси
- Пример 2. Узлы
внутри брандмауэра подключаются напрямую, а вне локальных серверов
— через прокси
- Пример 3. Если узел
распознаваемый, подключение напрямую, иначе — через прокси
- Пример 4. Если узел
находится в указанной подсети, подключение напрямую, иначе — через
прокси
- Пример 5.
Определение типа подключения на основе домена узла
- Пример 6.
Определение типа подключения на основе используемого
протокола
- Пример 7.
Определение настройки прокси проверкой соответствия имени веб-узла
IP-адресу
- Пример 8. Если IP
узла соответствует указанному IP, подключение через прокси, иначе —
напрямую
- Пример 9. Если в
имени узла есть точки, подключение через прокси, иначе —
напрямую
- Пример 10. Укажите
дни недели для подключения через прокси, в другие дни —
напрямую
Примечание Функции isInNet, isResolvable и dnsResolve запрашивают DNS-сервер. Ссылки на объекты, свойства и методы объектной модели приводят к сбою файла автоконфигурации прокси без уведомления. Например, ссылки window.open(...), alert(...) и password(...) вызывают сбой файла автоконфигурации прокси.
Пример 1. Локальные узлы подключаются напрямую, все остальные — через прокси
Следующая функция проверяет, является ли имя узла именем локального узла, и если да, то прямое ли подключение. Если имя узла не является именем локального узла, подключение идет через прокси-сервер (прокси).
function FindProxyForURL(url, host) { if (isPlainHostName(host)) return "DIRECT"; else return "PROXY proxy:80"; }
Функция isPlainHostName
проверяет, есть ли
точки в имени узла. Если есть, возвращает false. Иначе возвращает
true.
Пример 2. Узлы внутри брандмауэра подключаются напрямую, снаружи локальные серверы подключаются через прокси.
Следующая функция проверяет, является ли имя узла «простым» именем узла (имея в виду, что имя домена не включено) или частью определенного домена (.company.com), но при этом имя узла не www и не home.
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, если домен узла с этим именем соответствует данному домену. |
Пример 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 вверху страницы.
Функция isInNet(узел, шаблон, маска) возвращает true, если IP-адрес узла соответствует указанному шаблону. Маска указывает, какую часть 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) возвращает true, если str соответствует 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(день1 [,день2] [,GMT] ) возвращает факт попадания текущего системного времени в диапазон, указанный параметрами день1, день2 и GMT. Обязателен только первый параметр. Параметр GMT указывает, что задано время по Гринвичу, а не местное.
Дополнительные ссылки:
- Дополнительные сведения о дополнительных
ресурсах и ссылках для пакета администрирования Windows® Internet
Explorer® 8 см. в разделе Ссылки.