chrome.proxy

Описание

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

Разрешения

proxy

Вы должны объявить разрешение «прокси» в манифесте расширения , чтобы использовать API настроек прокси. Например:

{
  "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
носки4 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.comexample. и [::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"]
  }
};
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() {}
);

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

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

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

Типы

Mode

Хром 54+

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

"прямой"

"Автоматически определять"

"pac_script"

"фиксированные_серверы"

"система"

PacScript

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

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

  • данные

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

    PAC-скрипт.

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

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

    Если это правда, неверный сценарий PAC не позволит сетевому стеку вернуться к прямым соединениям. По умолчанию ложь.

  • 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».

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

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

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

    Список серверов для подключения без прокси-сервера.

  • резервный прокси

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

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

  • проксиForFtp

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

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

  • проксифорHttp

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

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

  • проксиForHttps

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

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

  • одиночный прокси

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

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

ProxyServer

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

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

  • хозяин

    нить

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

  • порт

    номер необязательно

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

  • схема

    Схема по желанию

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

Scheme

Хром 54+

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

"http"

"https"

"быстро"

"носки4"

"носки5"

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

settings

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

События

onProxyError

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

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

Параметры

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

    функция

    Параметр callback выглядит так:

    (details: object)=>void

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

      объект

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

        нить

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

      • ошибка

        нить

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

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

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

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