Per un'intestazione definita dall'operatore del proxy, Requests espone HTTPAdapter.proxy_headers come punto di sostituzione:

from urllib.parse import urlsplit
import requests
from requests.adapters import HTTPAdapter

class TaggedProxy(HTTPAdapter):
    def proxy_headers(self, proxy):
        headers = super().proxy_headers(proxy)
        endpoint = urlsplit(proxy)
        if (endpoint.scheme == 'http'
                and endpoint.hostname == 'proxy.example'
                and endpoint.port == 8080):
            headers['X-Proxy-Account'] = 'department-a'
        return headers

with requests.Session() as session:
    adapter = TaggedProxy()
    session.mount('http://', adapter)
    session.mount('https://', adapter)
    response = session.get(
        'https://service.example/data',
        proxies={'https': 'http://proxy.example:8080'},
        timeout=15,
    )

X-Proxy-Account è un esempio di campo compreso da questo specifico proxy, non un modo standard di autenticarsi verso ogni intermediario.

Parti da super().proxy_headers(proxy). Requests usa quel metodo per generare Proxy-Authorization quando l'URL fornisce un account Basic. Sostituire l'intero risultato può perdere questo comportamento.

L'adattatore passa questi valori al ProxyManager di urllib3. In un tunnel HTTPS accompagnano CONNECT. La normale mappatura delle intestazioni di richiesta descrive la richiesta successiva verso la destinazione.

I gestori proxy sono memorizzati in cache per URL del proxy. Non trattare questo hook come una callback non in cache per richiesta applicativa per un valore che deve cambiare a ogni chiamata. Scegli la proprietà del trasporto di conseguenza quando il marcatore dell'account varia.

Nell'inoltro HTTP semplice, i campi proxy necessitano ancora della politica di consumo prevista dall'intermediario. Che un'intestazione sia specifica del proxy nell'API client non garantisce riservatezza se il proxy la inoltra.

Articoli correlati