Setarea antetelor de proxy cu HTTPAdapter.proxy_headers din Requests
Extindeți HTTPAdapter.proxy_headers pentru un câmp definit de proxy, păstrând generarea existentă a antetului de autentificare proxy din Requests.
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.