browser.proxy

Описание

Используйте API chrome.proxy для управления настройками прокси-сервера Chrome. Для получения и настройки конфигурации прокси-сервера этот API использует прототип ChromeSetting типа API.

Разрешения

proxy

Чтобы использовать API настроек прокси-сервера, необходимо объявить разрешение proxy в манифесте расширения. Пример:

{
  "name": "My extension",
  ...
  "permissions": [
    "proxy"
  ],
  ...
}

Основные понятия и использование

Настройки прокси-сервера задаются в объекте proxy.ProxyConfig. В зависимости от настроек прокси-сервера Chrome, они могут содержать proxy.ProxyRules или proxy.PacScript.

Режимы прокси-сервера

Атрибут mode объекта ProxyConfig определяет общее поведение Chrome в отношении использования прокси-сервера. Возможные значения:

direct
В режиме direct все подключения создаются напрямую, без использования прокси-сервера. В этом режиме в объекте ProxyConfig не допускаются другие параметры.
auto_detect
В режиме auto_detect конфигурация прокси-сервера определяется PAC-скриптом, который можно скачать по адресу http://wpad/wpad.dat. В этом режиме в объекте ProxyConfig нельзя использовать другие параметры.
pac_script
В режиме pac_script конфигурация прокси-сервера определяется PAC-скриптом, который либо извлекается из URL, указанного в объекте proxy.PacScript, либо берется буквально из элемента data, указанного в объекте proxy.PacScript. Кроме того, в этом режиме нельзя использовать другие параметры в объекте ProxyConfig.
fixed_servers
В режиме fixed_servers конфигурация прокси-сервера кодируется в объекте proxy.ProxyRules. Структура этого объекта описана в разделе Правила прокси-сервера. Кроме того, в режиме fixed_servers в объекте ProxyConfig не допускаются другие параметры.
system
В режиме system конфигурация прокси-сервера берется из операционной системы. В этом режиме в объекте ProxyConfig нельзя использовать другие параметры. Обратите внимание, что режим system отличается от отсутствия конфигурации прокси-сервера. В последнем случае Chrome использует системные настройки, только если в командной строке не заданы параметры, влияющие на конфигурацию прокси-сервера.

Правила прокси-сервера

Объект proxy.ProxyRules может содержать атрибут singleProxy или поднабор атрибутов proxyForHttp, proxyForHttps, proxyForFtp и fallbackProxy.

В первом случае трафик HTTP, HTTPS и FTP передается через указанный прокси-сервер. Остальной трафик отправляется напрямую. В последнем случае поведение немного отличается: если прокси-сервер настроен для протокола HTTP, HTTPS или FTP, соответствующий трафик передается через указанный сервер. Если такой прокси-сервер не указан или трафик использует протокол, отличный от HTTP, HTTPS или FTP, используется fallbackProxy. Если значение fallbackProxy не указано, трафик передается напрямую без прокси-сервера.

Объекты прокси-сервера

Прокси-сервер настраивается в объекте proxy.ProxyServer. Для подключения к прокси-серверу (определяется атрибутом host) используется протокол, заданный в атрибуте scheme. Если значение scheme не указано, по умолчанию применяется http.

Если в объекте proxy.ProxyServer не задано значение port, порт определяется по схеме. Порты по умолчанию:

СхемаПорт
http80
https443
socks41080
socks51080

Список обхода

Отдельные серверы можно исключить из проксирования с помощью bypassList. В этом списке могут быть следующие записи:

[SCHEME://]HOST_PATTERN[:PORT]

Соответствует всем именам хостов, которые соответствуют шаблону HOST_PATTERN. Если в начале строки указан символ ".", он интерпретируется как "*.".

Примеры: "foobar.com", "*foobar.com", "*.foobar.com", "*foobar.com:99", "https://x.*.y.com:99".

ШаблонСоответствуетНе соответствует
".foobar.com""www.foobar.com""foobar.com"
"*.foobar.com""www.foobar.com""foobar.com"
"foobar.com""foobar.com""www.foobar.com"
"*foobar.com""foobar.com", "www.foobar.com", "foofoobar.com"
[SCHEME://]IP_LITERAL[:PORT]

Сопоставлять URL, которые являются литералами IP-адресов. По сути, это похоже на первый случай, но с особыми случаями для обработки канонизации литералов IP. Например, соответствие [0:0:0::1] будет таким же, как и соответствие [::1], поскольку канонизация IPv6 выполняется внутри системы.

Примеры: 127.0.1, [0:0::1], [::1]:80, https://[::1]:443.

IP_LITERAL/PREFIX_LENGTH_IN_BITS

Поиск любого URL, содержащего литерал IP-адреса (IP_LITERAL) в заданном диапазоне. Диапазон IP-адресов (PREFIX_LENGTH_IN_BITS) указывается в нотации CIDR.

Соответствует любому URL, содержащему IP-адрес в указанном диапазоне. Диапазон IP-адресов указывается в формате CIDR. Примеры: "192.168.1.1/16", "fefe:13::abc/33"

<local>

Строка <local> соответствует простым именам хостов. Простое имя хоста не содержит точек и не является IP-адресом. Например, example и localhost – это простые имена хостов, а example.com, example. и [::1] – нет.

Пример: "<local>"

Примеры

Приведенный ниже код задает прокси-сервер SOCKS 5 для HTTP-подключений ко всем серверам, кроме foobar.com, и использует прямые подключения для всех остальных протоколов. Настройки применяются к обычным окнам и окнам инкогнито, поскольку окна инкогнито наследуют настройки обычных окон. Также ознакомьтесь с документацией по Types API.

var config = {
  mode: "fixed_servers",
  rules: {
    proxyForHttp: {
      scheme: "socks5",
      host: "1.2.3.4"
    },
    bypassList: ["foobar.com"]
  }
};
browser.proxy.settings.set(
  {value: config, scope: 'regular'},
  function() {}
);

Следующий код задает собственный PAC-скрипт.

var config = {
  mode: "pac_script",
  pacScript: {
    data: "function FindProxyForURL(url, host) {\n" +
          "  if (host == 'foobar.com')\n" +
          "    return 'PROXY blackhole:80';\n" +
          "  return 'DIRECT';\n" +
          "}"
  }
};
browser.proxy.settings.set(
  {value: config, scope: 'regular'},
  function() {}
);

Следующий фрагмент кода запрашивает текущие действующие настройки прокси-сервера. Действующие настройки прокси-сервера могут определяться другим расширением или правилом. Подробную информацию можно найти в документации по Types API.

browser.proxy.settings.get(
  {'incognito': false},
  function(config) {
    console.log(JSON.stringify(config));
  }
);

Обратите внимание, что объект value, переданный в set(), не идентичен объекту value, переданному в функцию обратного вызова get(). Последний будет содержать элемент rules.proxyForHttp.port.

Типы

Mode

Chrome 54+ browser.* начиная с Chrome 148

Перечисление

"direct"

"auto_detect"

"pac_script"

"fixed_servers"

"system"

PacScript

Объект, содержащий информацию об автоконфигурации прокси-сервера. Только одно из полей должно быть заполнено.

Свойства

  • делал.

    Строка (необязательно)

    PAC-скрипт.

  • обязательно

    Логическое значение (необязательно)

    Если правило включено, недопустимый PAC-скрипт не позволит сетевому стеку вернуться к прямым подключениям. Значение по умолчанию – false.

  • url

    Строка (необязательно)

    URL файла PAC, который нужно использовать.

ProxyConfig

Объект, содержащий полную конфигурацию прокси-сервера.

Свойства

  • режим

    direct – не использовать прокси-сервер; auto_detect – определять настройки прокси-сервера автоматически; pac_script – использовать указанный PAC-скрипт; fixed_servers – указать прокси-серверы вручную; system – использовать системные настройки прокси-сервера.

  • pacScript

    PacScript необязательный

    Скрипт автоконфигурации прокси-сервера (PAC) для этой конфигурации. Используется для режима pac_script.

  • правила

    ProxyRules необязательный

    Правила прокси-сервера, описывающие эту конфигурацию. Используйте это правило для режима fixed_servers.

ProxyRules

Объект, содержащий набор правил прокси-сервера для всех протоколов. Используйте singleProxy или подмножество proxyForHttp, proxyForHttps, proxyForFtp и fallbackProxy.

Свойства

  • bypassList

    string[] необязательно

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

  • fallbackProxy

    ProxyServer необязательный

    Прокси-сервер, который будет использоваться для всего остального или если не указан ни один из параметров proxyFor…

  • proxyForFtp

    ProxyServer необязательный

    Прокси-сервер, который будет использоваться для FTP-запросов.

  • proxyForHttp

    ProxyServer необязательный

    Прокси-сервер, который будет использоваться для HTTP-запросов.

  • proxyForHttps

    ProxyServer необязательный

    Прокси-сервер, который будет использоваться для HTTPS-запросов.

  • singleProxy

    ProxyServer необязательный

    Прокси-сервер, который будет использоваться для всех запросов по URL (http, https и ftp).

ProxyServer

Объект, инкапсулирующий спецификацию одного прокси-сервера.

Свойства

  • хост

    string

    Имя хоста или IP-адрес прокси-сервера. Имена хостов должны быть в кодировке ASCII (в формате Punycode). IDNA пока не поддерживается.

  • порт

    number (необязательно)

    Порт прокси-сервера. По умолчанию используется порт, зависящий от схемы.

  • схема

    Схема необязательно

    Схема (протокол) самого прокси-сервера. Значение по умолчанию – http.

Scheme

Chrome 54+ browser.* начиная с Chrome 148

Перечисление

"http"

"https"

"quic"

"socks4"

"socks5"

Свойства

settings

Настройки прокси-сервера, которые будут использоваться. Значение этого параметра – объект ProxyConfig.

События

onProxyError

browser.proxy.onProxyError.addListener(
  callback: function,
)

Уведомляет об ошибках прокси-сервера.

Параметры

  • обратный вызов

    function

    Параметр callback выглядит следующим образом:

    (details: object) => void

    • подробные сведения

      Объект

      • подробные сведения

        string

        Дополнительные сведения об ошибке, например об ошибке выполнения JavaScript.

      • ошибка

        string

        Описание ошибки.

      • fatal

        Логическое значение

        Если значение true, ошибка была критической и сетевая транзакция была прервана. В противном случае будет использоваться прямое подключение.