Python Requests: autentificări Basic separate pentru proxy și site
Trimite autentificarea Basic a proxy-ului prin URL-ul acestuia și pe cea a site-ului destinație prin argumentul auth din Requests.
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.