Tarpinio serverio antraščių nustatymas naudojant Requests HTTPAdapter.proxy_headers
Išplėskite HTTPAdapter.proxy_headers tarpinio serverio apibrėžtam laukui, išlaikydami esamą Requests tarpinio serverio autentifikavimo antraštės generavimą.
Tarpinio serverio operatoriaus apibrėžtai antraštei Requests siūlo HTTPAdapter.proxy_headers kaip perrašymo tašką:
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 yra lauko, kurį supranta būtent šis tarpinis serveris, pavyzdys, o ne standartinis būdas autentifikuotis prie kiekvieno tarpininko.
Pradėkite nuo super().proxy_headers(proxy). Requests naudoja tą metodą Proxy-Authorization generuoti, kai URL pateikia Basic paskyrą. Viso rezultato pakeitimas gali prarasti šį elgesį.
Adapteris perduoda šias reikšmes į urllib3 ProxyManager. HTTPS tunelyje jos lydi CONNECT. Įprastas užklausos antraščių susiejimas apibūdina vėlesnę užklausą tikslui.
Tarpinio serverio tvarkyklės kaupiamos podėlyje pagal tarpinio serverio URL. Nelaikykite šio kablio nekaujamu atgaliniu iškvietimu kiekvienai verslo užklausai dėl reikšmės, kuri turi keistis kiekviename kvietime. Kai paskyros žymė kinta, pasirinkite transporto nuosavybę atitinkamai.
Paprasto HTTP perdavimo atveju tarpinio serverio laukams vis dar reikia tarpininko numatytos vartojimo politikos. Tai, kad antraštė kliento API yra būdinga tarpiniam serveriui, nėra konfidencialumo garantija, jei tarpinis serveris ją persiunčia.