Postavljanje proxy zaglavlja pomoću HTTPAdapter.proxy_headers u Requests-u
Proširite HTTPAdapter.proxy_headers za polje koje definira proxy, uz zadržavanje postojećeg generiranja zaglavlja proxy autentifikacije u Requests-u.
Za zaglavlje koje definira operator proxyja, Requests izlaže HTTPAdapter.proxy_headers kao točku za prepisivanje:
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 primjer je polja koje razumije upravo ovaj proxy, a ne standardni način autentifikacije prema svakom posredniku.
Počnite s super().proxy_headers(proxy). Requests koristi tu metodu za generiranje Proxy-Authorization kada URL sadrži Basic račun. Zamjena cijelog rezultata može izgubiti to ponašanje.
Adapter prosljeđuje te vrijednosti u ProxyManager iz urllib3. Kod HTTPS tunela prate CONNECT. Uobičajeno preslikavanje zaglavlja zahtjeva opisuje kasniji zahtjev prema odredištu.
Proxy manageri se keširaju po URL-u proxyja. Ne tretirajte ovu kuku kao nekeširani povratni poziv po poslovnom zahtjevu za vrijednost koja se mora mijenjati pri svakom pozivu. Odaberite vlasništvo transporta u skladu s tim kada se oznaka računa mijenja.
Kod običnog HTTP prosljeđivanja proxy polja i dalje trebaju namjeravanu politiku potrošnje posrednika. To što je zaglavlje specifično za proxy u klijentskom API-ju nije jamstvo povjerljivosti ako ga proxy proslijedi dalje.