Python Requests: separate Basic-innlogginger for proxy og nettsted
Send proxyens Basic-innlogging via URL-en og nettstedets Basic-innlogging via auth-argumentet i Requests.
Kontorets proxy krever én konto. Nettstedet bak krever en annen. Requests har separate inndata for disse to Basic-innloggingene: påloggingsinformasjon i proxyens URL og forespørselens auth-argument.
from urllib.parse import quote
import requests
proxy_url = (
f"http://{quote(proxy_user, safe='')}:"
f"{quote(proxy_password, safe='')}@proxy.example:8080"
)
response = requests.get(
"https://reports.example/private/",
proxies={"https": proxy_url},
auth=(site_user, site_password),
timeout=(5, 20),
)
response.raise_for_status()
De fire kontovariablene kommer fra applikasjonens konfigurasjon for påloggingsinformasjon. Å kode proxyens brukernavn og passord hver for seg bevarer tegn som et at-tegn uten å gjøre dem om til URL-skilletegn.
Nøkkelen https i ordboken velger denne ruten for et HTTPS-mål. Verdien begynner fortsatt med http:// fordi det er protokollen som brukes for å nå denne eksempelproxien.
For den HTTPS-forespørselen hører proxy-innloggingen til CONNECT-utvekslingen. Nettstedets innlogging hører til den senere forespørselen gjennom tunnelen som er etablert. Når adapteret utleder proxy-autorisasjonen fra sin egen URL, blir den værende på riktig hopp; for dette Basic-tilfellet trengs ingen kombinert autentiseringsklasse.
En 407 angir mellommennets utfordring. En 401 fra nettstedet angir målets utfordring. Bruk det svaret til å avgjøre hvilken av de to konfigurerte kontoene som trenger oppmerksomhet.