Proxy-Header mit HTTPAdapter.proxy_headers von Requests setzen
HTTPAdapter.proxy_headers für ein proxydefiniertes Feld erweitern und dabei die bestehende Erzeugung der Proxy-Authentifizierungs-Header von Requests beibehalten.
Für einen Header, den der Proxybetreiber festlegt, bietet Requests HTTPAdapter.proxy_headers als Überschreibungspunkt an:
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 ist ein Beispiel für ein Feld, das genau dieser Proxy versteht, keine standardisierte Authentifizierung gegenüber jedem Vermittler.
Beginnen Sie mit super().proxy_headers(proxy). Requests nutzt diese Methode, um Proxy-Authorization zu erzeugen, wenn die URL ein Basic-Konto liefert. Ein vollständiges Ersetzen des Ergebnisses kann dieses Verhalten verlieren.
Der Adapter reicht diese Werte an den ProxyManager von urllib3 weiter. Bei einem HTTPS-Tunnel begleiten sie CONNECT. Die gewöhnliche Zuordnung der Anfrage-Header beschreibt die spätere Anfrage an das Ziel.
Proxy-Manager werden pro Proxy-URL zwischengespeichert. Behandeln Sie diesen Hook nicht als ungecachten Callback je Geschäftsanfrage für einen Wert, der sich bei jedem Aufruf ändern muss. Wählen Sie die Transportzuständigkeit entsprechend, wenn eine Kontokennung variiert.
Bei einfacher HTTP-Weiterleitung brauchen Proxy-Felder weiterhin die vorgesehene Verbrauchsrichtlinie des Vermittlers. Dass ein Header in der Client-API proxyspezifisch ist, ist keine Vertraulichkeitsgarantie, wenn der Proxy ihn weiterreicht.