chrome.proxy

Beschreibung

Mit der chrome.proxy API können Sie die Proxy-Einstellungen von Chrome verwalten. Diese API verwendet den Prototyp „ChromeSetting“ der API vom Typ „ChromeSetting“, um die Proxykonfiguration abzurufen und festzulegen.

Berechtigungen

proxy

Manifest

Sie müssen die Berechtigung "proxy" im Erweiterungsmanifest deklarieren, um die API für Proxy-Einstellungen verwenden zu können. Beispiel:

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

Objekte und Eigenschaften

Proxy-Einstellungen werden in einem proxy.ProxyConfig-Objekt definiert. Je nach den Proxy-Einstellungen von Chrome, können die Einstellungen proxy.ProxyRules oder ein proxy.PacScript enthalten.

Proxymodi

Das Attribut mode eines ProxyConfig-Objekts bestimmt das allgemeine Verhalten von Chrome in Bezug auf die Proxynutzung. Es kann die folgenden Werte annehmen:

direct
Im Modus direct werden alle Verbindungen direkt erstellt, ohne dass ein Proxy beteiligt ist. In diesem Modus sind keine weiteren Parameter im ProxyConfig-Objekt zulässig.
auto_detect
Im Modus auto_detect wird die Proxykonfiguration durch ein PAC-Skript bestimmt, das unter http://wpad/wpad.dat heruntergeladen werden kann. In diesem Modus sind keine weiteren Parameter im ProxyConfig-Objekt zulässig.
pac_script
Im pac_script Modus wird die Proxykonfiguration durch ein PAC-Skript bestimmt, das entweder über die im proxy.PacScript-Objekt angegebene URL abgerufen oder direkt aus dem im proxy.PacScript-Objekt angegebenen data-Element übernommen wird. Außerdem sind in diesem Modus keine weiteren Parameter im ProxyConfig-Objekt zulässig.
fixed_servers
Im Modus fixed_servers wird die Proxykonfiguration in einem proxy.ProxyRules-Objekt codiert. Die Struktur wird unter Proxyregeln beschrieben. Außerdem sind im Modus fixed_servers keine weiteren Parameter im ProxyConfig-Objekt zulässig.
system
Im Modus system wird die Proxykonfiguration vom Betriebssystem übernommen. In diesem Modus sind keine weiteren Parameter im ProxyConfig-Objekt zulässig. Der Modus system unterscheidet sich davon, dass keine Proxykonfiguration festgelegt wird. Im letzteren Fall greift Chrome nur dann auf die Systemeinstellungen zurück, wenn keine Befehlszeilenoptionen die Proxykonfiguration beeinflussen.

Proxyregeln

Das proxy.ProxyRules-Objekt kann entweder ein singleProxy-Attribut oder eine Teilmenge von proxyForHttp, proxyForHttps, proxyForFtp, und fallbackProxy enthalten.

Im ersten Fall wird der HTTP-, HTTPS- und FTP-Traffic über den angegebenen Proxyserver geleitet. Anderer Traffic wird direkt gesendet. Im letzteren Fall ist das Verhalten etwas komplexer: Wenn ein Proxyserver für das HTTP-, HTTPS- oder FTP-Protokoll konfiguriert ist, wird der entsprechende Traffic über den angegebenen Server geleitet. Wenn kein solcher Proxyserver angegeben ist oder der Traffic ein anderes Protokoll als HTTP, HTTPS oder FTP verwendet, wird fallbackProxy verwendet. Wenn kein fallbackProxy angegeben ist, wird der Traffic direkt ohne Proxyserver gesendet.

Proxyserverobjekte

Ein Proxyserver wird in einem proxy.ProxyServer-Objekt konfiguriert. Die Verbindung zum Proxyserver (definiert durch das Attribut host) verwendet das im Attribut scheme definierte Protokoll. Wenn kein scheme angegeben ist, wird für die Proxyverbindung standardmäßig http verwendet.

Wenn in einem proxy.ProxyServer-Objekt kein port definiert ist, wird der Port aus dem Schema abgeleitet. Die Standardports sind:

SchemaPort
http80
https443
socks41080
socks51080

Umgehungsliste

Einzelne Server können mit bypassList vom Proxy ausgeschlossen werden. Diese Liste kann die folgenden Einträge enthalten:

[SCHEME://]HOST_PATTERN[:PORT]

Entspricht allen Hostnamen, die dem Muster HOST_PATTERN entsprechen. Ein führendes "." wird als "*." interpretiert.

Beispiele: "foobar.com", "*foobar.com", "*.foobar.com", "*foobar.com:99", "https://x.*.y.com:99".

MusterÜbereinstimmungenStimmt nicht überein
".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]

Entspricht URLs, die IP-Adressliterale sind. Konzeptionell ähnelt dies dem ersten Fall, aber es gibt Sonderfälle für die Kanonisierung von IP-Literalen. Beispielsweise ist die Übereinstimmung mit „[0:0:0::1]“ dasselbe wie die Übereinstimmung mit „[::1]“, da die IPv6-Kanonisierung intern erfolgt.

Beispiele: 127.0.1, [0:0::1], [::1]:80, https://[::1]:443

IP_LITERAL/PREFIX_LENGTH_IN_BITS

Entspricht jeder URL, die ein IP-Literal (IP_LITERAL) im angegebenen Bereich enthält. Der IP-Bereich (PREFIX_LENGTH_IN_BITS) wird mit der CIDR Notation angegeben.

Entspricht jeder URL, die ein IP-Literal im angegebenen Bereich enthält. Der IP-Bereich wird mit der CIDR-Notation angegeben. Beispiele: "192.168.1.1/16", "fefe:13::abc/33"

<local>

Der Literalstring <local> entspricht einfachen Hostnamen. Ein einfacher Hostname enthält keine Punkte und ist kein IP-Literal. Beispielsweise sind example und localhost einfache Hostnamen, während example.com, example., und [::1] es nicht sind.

Beispiel: "<local>"

Beispiele

Der folgende Code legt einen SOCKS 5-Proxy für HTTP-Verbindungen zu allen Servern außer „foobar.com“ fest und verwendet für alle anderen Protokolle direkte Verbindungen. Die Einstellungen gelten für normale und Inkognitofenster, da Inkognitofenster Einstellungen von normalen Fenstern übernehmen. Weitere Informationen finden Sie in der Types API Dokumentation.

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() {}
);

Der folgende Code legt ein benutzerdefiniertes PAC-Skript fest.

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() {}
);

Das nächste Snippet fragt die aktuell gültigen Proxy-Einstellungen ab. Die effektiven Proxy-Einstellungen können von einer anderen Erweiterung oder einer Richtlinie bestimmt werden. Weitere Informationen finden Sie in der Dokumentation zur Types API.

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

Beachten Sie, dass das an set() übergebene value-Objekt nicht mit dem value-Objekt identisch ist, das an die Callback-Funktion von get() übergeben wird. Letzteres enthält ein rules.proxyForHttp.port-Element.

Typen

Mode

Chrome 54+

Enum

"direct"

"auto_detect"

"pac_script"

"fixed_servers"

"system"

PacScript

Ein Objekt, das Informationen zur automatischen Proxykonfiguration enthält. Genau eines der Felder sollte nicht leer sein.

Properties

  • data

    String optional

    Ein PAC-Skript.

  • mandatory

    Boolesch optional

    Wenn „true“, verhindert ein ungültiges PAC-Skript, dass der Netzwerk-Stack auf direkte Verbindungen zurückgreift. Die Standardeinstellung ist „false“.

  • url

    String optional

    URL der zu verwendenden PAC-Datei.

ProxyConfig

Ein Objekt, das eine vollständige Proxykonfiguration kapselt.

Properties

  • mode

    „direct“ = Nie einen Proxy verwenden „auto_detect“ = Proxy-Einstellungen automatisch erkennen „pac_script“ = Angegebenes PAC-Skript verwenden „fixed_servers“ = Proxyserver manuell angeben „system“ = Proxy-Einstellungen des Systems verwenden

  • pacScript

    PacScriptoptional

    Das PAC-Skript (Proxy Auto-Config) für diese Konfiguration. Verwenden Sie dies für den Modus „pac_script“.

  • rules

    ProxyRules, optional

    Die Proxyregeln, die diese Konfiguration beschreiben. Verwenden Sie dies für den Modus „fixed_servers“.

ProxyRules

Ein Objekt, das den Satz von Proxyregeln für alle Protokolle kapselt. Verwenden Sie entweder „singleProxy“ oder (eine Teilmenge von) „proxyForHttp“, „proxyForHttps“, „proxyForFtp“ und „fallbackProxy“.

Properties

  • bypassList

    String-Array, optional

    Liste der Server, mit denen ohne Proxyserver eine Verbindung hergestellt werden soll.

  • fallbackProxy

    ProxyServer optional

    Der Proxyserver, der für alles andere verwendet werden soll oder wenn keiner der spezifischen „proxyFor...“ angegeben ist.

  • proxyForFtp

    ProxyServer optional

    Der Proxyserver, der für FTP-Anfragen verwendet werden soll.

  • proxyForHttp

    ProxyServer optional

    Der Proxyserver, der für HTTP-Anfragen verwendet werden soll.

  • proxyForHttps

    ProxyServer optional

    Der Proxyserver, der für HTTPS-Anfragen verwendet werden soll.

  • singleProxy

    ProxyServer optional

    Der Proxyserver, der für alle URL-Anfragen verwendet werden soll (d. h. HTTP, HTTPS und FTP).

ProxyServer

Ein Objekt, das die Spezifikation eines einzelnen Proxyservers kapselt.

Properties

  • host

    String

    Der Hostname oder die IP-Adresse des Proxyservers. Hostnamen müssen in ASCII (im Punycode-Format) angegeben werden. IDNA wird noch nicht unterstützt.

  • port

    Zahl optional

    Der Port des Proxyservers. Standardmäßig wird ein Port verwendet, der vom Schema abhängt.

  • scheme

    Schema optional

    Das Schema (Protokoll) des Proxyservers selbst. Die Standardeinstellung ist „http“.

Scheme

Chrome 54+

Enum

"http"

"https"

"quic"

"socks4"

"socks5"

Properties

settings

Zu verwendende Proxy-Einstellungen. Der Wert dieser Einstellung ist ein ProxyConfig-Objekt.

Ereignisse

onProxyError

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

Benachrichtigt über Proxyfehler.

Parameter

  • callback

    Funktion

    Der Parameter callback sieht so aus:

    (details: object) => void

    • Details

      Objekt

      • Details

        String

        Zusätzliche Details zum Fehler, z. B. ein JavaScript-Laufzeitfehler.

      • Fehler

        String

        Die Fehlerbeschreibung.

      • fatal

        Boolesch

        Wenn „true“, war der Fehler fatal und die Netzwerktransaktion wurde abgebrochen. Andernfalls wird stattdessen eine direkte Verbindung verwendet.