Establir capçaleres de proxy amb HTTPAdapter.proxy_headers de Requests
Amplieu HTTPAdapter.proxy_headers per a un camp definit pel proxy tot conservant la generació existent de capçaleres d'autenticació de proxy de Requests.
Per a una capçalera definida per l'operador del proxy, Requests exposa HTTPAdapter.proxy_headers com a punt de substitució:
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 és un exemple de camp que entén aquest proxy concret, no una manera estàndard d'autenticar-se davant de qualsevol intermediari.
Comenceu amb super().proxy_headers(proxy). Requests fa servir aquest mètode per generar Proxy-Authorization quan l'URL aporta un compte Basic. Substituir tot el resultat pot fer perdre aquest comportament.
L'adaptador passa aquests valors a ProxyManager d'urllib3. En un túnel HTTPS acompanyen CONNECT. El mapatge habitual de capçaleres de sol·licitud descriu la sol·licitud posterior a la destinació.
Els gestors de proxy es memoritzen per URL de proxy. No tracteu aquest ganxo com una devolució de trucada no memoritzada per sol·licitud de negoci per a un valor que ha de canviar a cada crida. Trieu la propietat del transport en conseqüència quan la marca de compte varia.
En la reenviada HTTP simple, els camps de proxy encara necessiten la política de consum prevista per l'intermediari. Que una capçalera sigui específica del proxy a l'API de client no garanteix la confidencialitat si el proxy la reenvia.