chrome.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 , он определяется на основе схемы. Порты по умолчанию:

Схема Порт
http 80
https 443
socks4 1080
носки5 1080

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

Отдельные серверы могут быть исключены из проксирования с помощью 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, и использует прямые соединения для всех остальных протоколов. Настройки применяются к обычным окнам и окнам в режиме инкогнито, поскольку окна в режиме инкогнито наследуют настройки от обычных окон. Также обратитесь к документации по API типов .

var config = {
  mode: "fixed_servers",
  rules: {
    proxyForHttp: {
      scheme: "socks5",
      host: "1.2.3.4"
    },
    bypassList: ["foobar.com"]
  }
};
chrome.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" +
          "}"
  }
};
chrome.proxy.settings.set(
  {value: config, scope: 'regular'},
  function() {}
);

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

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

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

Типы

Mode

Chrome 54+

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

"прямой"

"auto_detect"

"pac_script"

"fixed_servers"

"система"

PacScript

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

Характеристики

  • данные

    строка необязательный

    Скрипт PAC.

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

    логический необязательный

    Если значение равно true, некорректный 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

    строка[] необязательный

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

  • fallbackProxy

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

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

  • proxyForFtp

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

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

  • proxyForHttp

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

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

  • proxyForHttps

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

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

  • singleProxy

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

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

ProxyServer

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

Характеристики

  • хозяин

    нить

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

  • порт

    число необязательно

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

  • схема

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

    Схема (протокол) самого прокси-сервера. По умолчанию используется протокол 'http'.

Scheme

Chrome 54+

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

"http"

"https"

"быстро"

"socks4"

"носки5"

Характеристики

settings

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

События

onProxyError

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

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

Параметры

  • перезвонить

    функция

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

    (details: object) => void

    • подробности

      объект

      • подробности

        нить

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

      • ошибка

        нить

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

      • смертельный

        логический

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