Proxy-ul biroului cere un cont. Site-ul din spate cere altul. Requests are intrări separate pentru aceste două autentificări Basic: datele de acces din URL-ul proxy-ului și argumentul auth al cererii.

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

Cele patru variabile de cont provin din configurația de date de acces a aplicației. Codificarea separată a numelui de utilizator și a parolei proxy-ului păstrează caractere precum semnul at fără a le transforma în delimitatori URL.

Cheia https din dicționar selectează această rută pentru o destinație HTTPS. Valoarea ei începe în continuare cu http:// deoarece acesta este protocolul folosit pentru a ajunge la acest proxy exemplu.

Pentru acea cerere HTTPS, autentificarea proxy-ului aparține schimbului CONNECT. Autentificarea site-ului aparține cererii ulterioare prin tunelul stabilit. Lăsând adaptorul să derive autorizarea proxy din propriul URL, aceasta rămâne la saltul relevant; pentru acest caz Basic nu este nevoie de o clasă de autentificare combinată.

Un 407 indică provocarea intermediarului. Un 401 de la site indică provocarea destinației. Folosește acel răspuns pentru a decide care dintre cele două conturi configurate are nevoie de atenție.

Articole similare