Un en-tête ajouté à http.Request.Header décrit la requête de destination. Lorsque HTTPS utilise un proxy HTTP, le transport effectue d'abord CONNECT. Les en-têtes de la requête de destination ne constituent pas une API de configuration générale pour cet échange antérieur.

Pour un en-tête statique exigé par votre proxy, configurez le ProxyConnectHeader du transport :

transport := &http.Transport{
    Proxy: http.ProxyURL(proxyURL),
    ProxyConnectHeader: http.Header{
        "X-Proxy-Account": []string{"example-account"},
    },
}

Ici, proxyURL est l'URL du point de terminaison analysée. L'en-tête est illustratif et n'est utile que si l'opérateur du proxy définit un tel champ.

Pour une valeur choisie par proxy ou par destination, utilisez GetProxyConnectHeader. La fonction de rappel documentée reçoit l'URL du proxy et la cible CONNECT. Lorsque cette fonction n'est pas nil, le champ statique ProxyConnectHeader est ignoré.

Gardez les valeurs dans la portée prévue. Un marqueur de compte réservé au proxy relève de l'échange avec le proxy ; une valeur d'autorisation de site web relève de la requête de destination. Si une fonction de rappel ne peut pas produire la valeur de poignée de main requise, renvoyez son erreur au lieu d'envoyer silencieusement une requête configurée différemment.

Ces réglages personnalisent le traitement de CONNECT. Ils n'inventent pas de protocole d'authentification propre et ne modifient pas la politique d'accès du service proxy.

Articles similaires