Pentru un antet definit de operatorul proxy, Requests expune HTTPAdapter.proxy_headers ca punct de suprascriere:

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 este un exemplu de câmp înțeles de acest proxy anume, nu o modalitate standard de autentificare la orice intermediar.

Începeți cu super().proxy_headers(proxy). Requests folosește acea metodă pentru a genera Proxy-Authorization când URL-ul furnizează un cont Basic. Înlocuirea întregului rezultat poate pierde acest comportament.

Adaptorul transmite aceste valori către ProxyManager din urllib3. Într-un tunel HTTPS, ele însoțesc CONNECT. Maparea obișnuită a antetelor cererii descrie cererea ulterioară către destinație.

Managerii de proxy sunt stocați în cache după URL-ul proxy. Nu tratați acest cârlig ca un callback necachet per cerere de business pentru o valoare care trebuie să se schimbe la fiecare apel. Alegeți proprietatea transportului în consecință când marcajul contului variază.

La redirecționarea HTTP simplă, câmpurile de proxy au în continuare nevoie de politica de consum prevăzută de intermediar. Faptul că un antet este specific proxy-ului în API-ul clientului nu garantează confidențialitatea dacă proxy-ul îl transmite mai departe.

Articole similare