Kontorets proxy kræver én konto. Websitet bag det kræver en anden. Requests har separate input til de to Basic-logins: legitimationsoplysninger i proxyens URL og anmodningens 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 kontovariabler kommer fra applikationens konfiguration af legitimationsoplysninger. Kodning af proxyens brugernavn og adgangskode hver for sig bevarer tegn som et at uden at gøre dem til URL-afgrænsere.

Nøglen https i ordbogen vælger denne rute til en HTTPS-destination. Dens værdi begynder stadig med http://, fordi det er protokollen, der bruges til at nå denne eksempelproxy.

For den HTTPS-anmodning hører proxy-loginet til CONNECT-udvekslingen. Website-loginet hører til den senere anmodning gennem den etablerede tunnel. Når adapteren udleder proxy-godkendelsen fra sin egen URL, bliver den på det relevante hop; der er ikke brug for nogen kombineret godkendelsesklasse i dette Basic-tilfælde.

En 407 angiver mellemleddets udfordring. En 401 fra websitet angiver destinationens udfordring. Brug det svar til at afgøre, hvilken af de to konfigurerede konti der kræver opmærksomhed.

Relaterede artikler