El proxy de l'oficina demana un compte. El lloc web que hi ha darrere en demana un altre. Requests té entrades separades per a aquests dos inicis de sessió Basic: les credencials dins de la URL del proxy i l'argument auth de la petició.

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()

Les quatre variables de compte provenen de la configuració de credencials de l'aplicació. Codificar per separat l'usuari i la contrasenya del proxy conserva caràcters com l'arrova sense convertir-los en delimitadors d'URL.

La clau https del diccionari selecciona aquesta ruta per a una destinació HTTPS. El seu valor encara comença per http:// perquè aquest és el protocol que s'utilitza per arribar a aquest proxy d'exemple.

En aquesta petició HTTPS, l'inici de sessió del proxy pertany a l'intercanvi CONNECT. L'inici de sessió del lloc pertany a la petició posterior a través del túnel establert. Deixar que l'adaptador dedueixi l'autorització del proxy a partir de la seva pròpia URL la manté al salt corresponent; per a aquest cas Basic no cal cap classe d'autenticació combinada.

Un 407 identifica el repte de l'intermediari. Un 401 del lloc identifica el repte de la destinació. Fes servir aquesta resposta per decidir quin dels dos comptes configurats necessita atenció.

Articles relacionats