Pre hlavičku definovanú operátorom proxy sprístupňuje Requests HTTPAdapter.proxy_headers ako miesto prepisu:

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 je príklad poľa, ktorému rozumie práve táto proxy, nie štandardný spôsob autentifikácie voči každému prostredníkovi.

Začnite s super().proxy_headers(proxy). Requests používa túto metódu na vytvorenie Proxy-Authorization, keď URL obsahuje účet Basic. Nahradenie celého výsledku môže toto správanie stratiť.

Adaptér odovzdáva tieto hodnoty do ProxyManager z urllib3. V tuneli HTTPS ich sprevádzajú pri CONNECT. Bežné mapovanie hlavičiek požiadavky opisuje neskoršiu požiadavku na cieľ.

Správcovia proxy sa ukladajú do medzipamäte podľa URL proxy. Nepovažujte tento hák za neuložené spätné volanie pri každej obchodnej požiadavke pre hodnotu, ktorá sa musí meniť pri každom volaní. Keď sa značka účtu mení, zvoľte vlastníctvo transportu zodpovedajúco.

Pri obyčajnom preposielaní HTTP stále polia proxy potrebujú zamýšľanú politiku spotreby prostredníka. To, že je hlavička v klientskom API špecifická pre proxy, nie je zárukou dôvernosti, ak ju proxy posunie ďalej.

Súvisiace články