Nastavení proxy hlaviček pomocí HTTPAdapter.proxy_headers v Requests
Rozšiřte HTTPAdapter.proxy_headers pro pole definované proxy a zachovejte stávající generování hlavičky proxy autentizace v Requests.
Pro hlavičku definovanou operátorem proxy zpřístupňuje Requests HTTPAdapter.proxy_headers jako místo pro přepsání:
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 příklad pole, kterému rozumí právě tato proxy, nikoli standardní způsob autentizace vůči každému prostředníkovi.
Začněte s super().proxy_headers(proxy). Requests tuto metodu používá k vytvoření Proxy-Authorization, když URL obsahuje účet Basic. Nahrazení celého výsledku může toto chování ztratit.
Adaptér předává tyto hodnoty do ProxyManager z urllib3. U tunelu HTTPS je doprovázejí u CONNECT. Běžné mapování hlaviček požadavku popisuje pozdější požadavek na cíl.
Správci proxy se ukládají do mezipaměti podle URL proxy. Nepovažujte tento hook za neuložený callback pro každý obchodní požadavek u hodnoty, která se musí měnit při každém volání. Když se značka účtu mění, zvolte vlastnictví transportu odpovídajícím způsobem.
Při obyčejném předávání HTTP stále proxy pole potřebují zamýšlenou politiku spotřeby prostředníka. To, že je hlavička v klientském API specifická pro proxy, není zárukou důvěrnosti, pokud ji proxy předá dál.