proxy.onRequest
===============

Déclenché lorsqu'une requête Web est sur le point d'être effectuée, pour donner à l'extension la possibilité de l'utiliser comme proxy.

Cet événement est étroitement modélisé sur les événements définis dans l'API `webRequest` Comme ces événements, sa fonction `addListener()` prend trois arguments :

* l'écouteur qui sera appelé lorsque l'événement est déclenché.
* Un objet `RequestFilter` contrôlant quelles requêtes provoquent le déclenchement de l'événement.
* un tableau de chaînes pour contrôler d'autres aspects du comportement de l'événement.

L'événement est déclenché avant l'un des événements `webRequest` pour la même demande.

Lorsque l'événement est déclenché, l'écouteur est appelé avec un objet contenant des informations sur la requête. L'écouteur renvoie un objet `proxy.ProxyInfo` représentant un proxy à utiliser (ou un tableau de tels objets, permettant au navigateur de basculer si un proxy est inaccessible).

Pour utiliser `proxy.onRequest`, une extension doit avoir la permission API "proxy" , ainsi que la permission d'hôte pour les URL des requêtes qu'elle intercepte - ela signifie essentiellement que les modèles de correspondance de l'argument `filter` doivent être un sous-ensemble de l'extension autorisations de l'hôte.

Syntaxe
-------


```js
browser.proxy.onRequest.addListener(
  listener, // function
  filter, // object
  extraInfoSpec, // optional array of strings
);
browser.proxy.onRequest.removeListener(listener);
browser.proxy.onRequest.hasListener(listener);
```


Les événements ont trois fonctions :

`addListener(listener, filter, extraInfoSpec)`

Ajoute un écouteur à cet événement.

`removeListener(listener)`

Arrêtez d'écouter cet événement. L'argument `listener` est l'écouteur à supprimer.

`hasListener(listener)`

Vérifiez si `listener` est enregistré pour cet événement. Renvoie `true` s'il écoute, sinon `false`.

Syntaxe addListener
-------------------

### Paramètres

`listener`

Fonction qui sera appelée lorsque cet événement se produit. La fonction passera un seul argument, qui est un objet `proxy.RequestDetails` contenant les détails de la requête.

L'écouteur peut renvoyer l'un des éléments suivants:

* un objet `proxy.ProxyInfo`
* un tableau d'objets `proxy.ProxyInfo`
* Une `Promise` qui se résout en un objet `ProxyInfo`
* Une `Promise` qui résout en un tableau d'objets `ProxyInfo`.

Si l'écouteur renvoie un tableau, ou une Promesse qui se résout en un tableau, alors tous les objets `ProxyInfo` après le premier représentent les basculements: si le proxy à la position N dans le tableau n'est pas accessible quand son `ProxyInfo.failoverTimeout` alors le navigateur essayez le proxy à la position N+1.

S'il y a une erreur spécifiant les objets `proxy.ProxyInfo` objects, alors `proxy.onError` sera appelé.

`filter`

`webRequest.RequestFilter`. Un ensemble de filtres qui limite les événements qui seront envoyés à cet écouteur.

`extraInfoSpec` Facultatif

`array` de `string`. Options supplémentaires pour l'événement. Vous pouvez passer une seule valeur, `"requestHeaders"`, pour inclure les en-têtes de demande dans l'objet de `details` transmis à l'écouteur.

Compatibilité des navigateurs
-----------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Exemples
--------

Ce code intercepte les requêtes à `<all_urls>`, et les envoie par procuration si elles ne sont pas destinées à un cadre de premier niveau.


```js
function shouldProxyRequest(requestInfo) {
  return requestInfo.parentFrameId != -1;
}

function handleProxyRequest(requestInfo) {
  if (shouldProxyRequest(requestInfo)) {
    console.log(`Proxying: ${requestInfo.url}`);
    return { type: "http", host: "127.0.0.1", port: 65535 };
  }
  return { type: "direct" };
}

browser.proxy.onRequest.addListener(handleProxyRequest, {
  urls: ["<all\_urls>"],
});
```

### Example extensions

* proxy-blocker