Python urllib: autentificare Basic a proxy-ului pentru cereri HTTP
Construiți un opener urllib explicit pentru o provocare Basic de la un proxy HTTP și distingeți acest schimb HTTP obișnuit de autentificarea HTTPS CONNECT.
Pentru o provocare Basic de la un proxy HTTP, folosiți ProxyBasicAuthHandler. Acest exemplu HTTP obișnuit păstrează ruta și contul într-un singur opener:
import os
from urllib.request import (
ProxyHandler, ProxyBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener,
)
proxy_url = 'http://proxy.example:8080'
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(
None, proxy_url,
os.environ['PROXY_USER'], os.environ['PROXY_PASSWORD'],
)
opener = build_opener(
ProxyHandler({'http': proxy_url}),
ProxyBasicAuthHandler(passwords),
)
with opener.open('http://example.com/', timeout=10) as response:
print(response.status)Folosiți punctul final real și contul furnizat de operator. Handlerul folosește managerul de parole pentru provocarea proxy-ului; potriviți URI-ul și realm-ul dorite ale proxy-ului. Autentificarea Basic la destinație folosește alt handler.
Apelarea directă a openerului păstrează această configurare locală. URL-ul cererii rămâne site-ul, nu intermediarul. Această rută HTTP în clar nu criptează un schimb Basic.
Nu deduceți din acest exemplu suport pentru tunel HTTPS. Un 407 în timpul CONNECT apare la configurare, înaintea unui răspuns obișnuit al destinației; integrarea aleasă trebuie să trateze autentificarea acolo. Schimbarea handlerului de autentificare al site-ului nu poate repara acea provocare anterioară.
URL-urile de proxy cu credențiale sunt un alt format întâlnit în exemple mai vechi. Dacă sunt folosite, codificați corect delimitatorii URL și țineți URL-ul rezultat cu secret în afara jurnalelor.