Sett proxy-hoder med Requests' HTTPAdapter.proxy_headers
Utvid HTTPAdapter.proxy_headers for et proxydefinert felt, mens Requests' eksisterende generering av proxy-autentiseringshoder beholdes.
For en header som proxyoperatøren definerer, tilbyr Requests HTTPAdapter.proxy_headers som overstyringspunkt:
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 er et eksempel på et felt som nettopp denne proxyen forstår, ikke en standard måte å autentisere mot enhver mellommann.
Begynn med super().proxy_headers(proxy). Requests bruker den metoden for å generere Proxy-Authorization når URL-en oppgir en Basic-konto. Å erstatte hele resultatet kan miste denne atferden.
Adapteren sender disse verdiene videre til urllib3s ProxyManager. I en HTTPS-tunnel følger de med CONNECT. Den vanlige header-tilordningen for forespørselen beskriver den senere forespørselen til målet.
Proxy-behandlere bufres per proxy-URL. Ikke behandle denne kroken som en ubufret tilbakeringing per forretningsforespørsel for en verdi som må endres ved hvert kall. Velg transporteierskap deretter når en kontomarkør varierer.
Ved vanlig HTTP-videresending trenger proxy-felt fortsatt mellommannens tiltenkte brukspolicy. At en header er proxyspesifikk i klient-API-et er ingen garanti for konfidensialitet hvis proxyen videresender den.