PAC-файл прокси: менять прокси через каждый заданный интервал времени? - PullRequest
2 голосов
/ 22 марта 2012

Я помню, как некоторое время назад читал о редактировании pac-файла прокси, который переключал бы прокси через каждый заданный интервал времени, например, ежечасно.

Но я не могу найти функцию или не помню, как это сделать,

Я ошибаюсь или это возможно с proxy.pac?

Я использую Mozilla.

ОБНОВЛЕНИЕ: FindProxyForURL() вызывается каждый раз при отправке HTTP-запроса?

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

PAC-файл - это просто функция Javascript function FindProxyForURL(url, host) {}, которая получает URL-адрес выбранного ресурса и возвращает строку, указывающую, какой прокси использовать (или DIRECT, если прокси-сервер вообще отсутствует) для этого ресурса. Все запросы браузера проходят через функцию, независимо от протокола.

В этом функциональном блоке вы должны быть в состоянии запросить текущее время и принять решение о том, какой прокси вернуть.

Например:

function FindProxyForURL(url, host) {
    // If URL has no dots in host name, send traffic direct.
    if (isPlainHostName(host)) return "DIRECT";

    // Known local Top Level Domains are direct
    if(/\.(local|lcl|domain|grp|localdomain)(\:\d+)?($|\/)/i.test(url))
        return "DIRECT";

    // Split traffic depending on the time
    var dTime = new Date();
    var hours = dTime.getHours();
    if (hours < 12) {
        // From midnight to lunchtime, use Proxy A
        // which is a standard HTTP proxy on port 8080
        return "PROXY proxyA.example.com:8080"
    } else {
        // From lunchtime to midnight, use Proxy B
        // which is a Socks5 proxy on port 777
        return "SOCKS5 proxyB.example.com:777"
    }
}
1 голос
/ 18 апреля 2012

Или вы можете положиться на существующие функции PAC :

timeRange () может использоваться для указания различных прокси для определенного диапазона времени. Примечание пример будет использовать «proxy1.example.com» с 8 утра до 6 вечера. Пример:

if (timeRange(8, 18)) return "PROXY proxy1.example.com:8080";
    else return "DIRECT";
...