De kantoorproxy vraagt om één account. De website erachter vraagt om een ander. Requests heeft aparte invoer voor die twee Basic-logins: inloggegevens in de proxy-URL en het auth-argument van het verzoek.

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 vier accountvariabelen komen uit de configuratie van inloggegevens van de applicatie. Gebruikersnaam en wachtwoord van de proxy apart coderen behoudt tekens zoals het apenstaartje zonder ze in URL-scheidingstekens te veranderen.

De sleutel https in het woordenboek kiest deze route voor een HTTPS-bestemming. De waarde begint nog steeds met http://, omdat dat het protocol is waarmee deze voorbeeldproxy wordt bereikt.

Bij dat HTTPS-verzoek hoort de proxylogin bij de CONNECT-uitwisseling. De websitelogin hoort bij het latere verzoek door de opgezette tunnel. Als de adapter de proxyautorisatie uit zijn eigen URL afleidt, blijft die bij de betreffende hop; voor dit Basic-geval is geen gecombineerde authenticatieklasse nodig.

Een 407 duidt op de uitdaging van de tussenpartij. Een 401 van de site duidt op de uitdaging van de bestemming. Gebruik dat antwoord om te beslissen welk van de twee geconfigureerde accounts aandacht nodig heeft.

Gerelateerde artikelen