Python urllib: proxy maršrutēšanas savienošana ar vietnes Basic autentifikāciju
Savienojiet urllib maršrutēšanu un galamērķa Basic autentifikāciju vienā skaidrā opener, divreiz neaizstājot globālo opener.
Izsaukot install_opener() divas reizes, otrais opener netiek pievienots pirmajam. Tas aizstāj moduļa noklusējuma opener. Ja viens objekts zina proxy, bet cits — vietnes pieteikšanos, izveidojiet vienu opener ar nepieciešamajiem handlers.
import os
from urllib.request import (ProxyHandler, HTTPBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener)
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(None, 'https://example.com/private/',
os.environ['SITE_USER'], os.environ['SITE_PASSWORD'])
opener = build_opener(
ProxyHandler({'https': 'http://203.0.113.10:8080'}),
HTTPBasicAuthHandler(passwords),
)
with opener.open('https://example.com/private/report', timeout=10) as response:
body = response.read()Proxy un galamērķis ir piemēri. Publiskam pakalpojumam, kas sasniedzams caur publisku HTTP proxy, HTTP proxy saraksts nodrošina kandidātu endpointus maršrutēšanas handleram. Šis opener novirza HTTPS pieprasījumu caur HTTP proxy un apstrādā galamērķa Basic izaicinājumu. Tas nekonfigurē proxy autentifikāciju.
Ja arī proxy pieprasa pieteikšanos, atsevišķi izvēlieties atbalstītu proxy autentifikācijas kārtību. 407 CONNECT laikā notiek pirms galamērķis var izdot savu izaicinājumu. Vietnes akreditācijas datu pievienošana paroļu pārvaldniekam nevar apmierināt to agrāko apmaiņu.
Tieša opener.open() izsaukšana saglabā konfigurāciju kopā ar darbību. Nav nepieciešams mainīt moduļa līmeņa noklusējumu, ja vien lietojumprogramma apzināti nevēlas, lai visi ērtie izsaukumi koplietotu šo opener.