Kontorets proxy kräver ett konto. Webbplatsen bakom kräver ett annat. Requests har separata indata för dessa två Basic-inloggningar: inloggningsuppgifter i proxyns URL och begäranens 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 fyra kontovariablerna kommer från programmets konfiguration för inloggningsuppgifter. Att koda proxyns användarnamn och lösenord var för sig bevarar tecken som ett at-tecken utan att göra dem till URL-avgränsare.

Nyckeln https i ordboken väljer denna väg för ett HTTPS-mål. Dess värde börjar fortfarande med http:// eftersom det är protokollet som används för att nå denna exempelproxy.

För den HTTPS-begäran hör proxyinloggningen till CONNECT-utbytet. Webbplatsens inloggning hör till den senare begäran genom den upprättade tunneln. När adaptern härleder proxyauktoriseringen från sin egen URL stannar den på rätt hopp; för detta Basic-fall behövs ingen kombinerad autentiseringsklass.

En 407 anger mellanhandens utmaning. En 401 från webbplatsen anger målets utmaning. Använd det svaret för att avgöra vilket av de två konfigurerade kontona som behöver uppmärksamhet.

Relaterade artiklar