Python urllib: kombinimi i rrugëtimit përmes proxy me Basic Authentication të faqes
Kombinoni rrugëtimin urllib dhe Basic authentication të destinacionit në një opener të vetëm eksplicit pa zëvendësuar dy herë opener-in global.
Thirrja e install_opener() dy herë nuk shton opener-in e dytë te i pari. Ai zëvendëson opener-in e parazgjedhur të modulit. Nëse një objekt e njeh proxy-n dhe një tjetër hyrjen në faqe, ndërtoni një opener të vetëm me handlers e nevojshëm.
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 dhe destinacioni janë shembuj. Për një shërbim publik të arritshëm përmes një proxy HTTP publik, lista e proxy-ve HTTP ofron endpoints kandidatë për handler-in e rrugëtimit. Ky opener e drejton kërkesën HTTPS përmes proxy HTTP dhe trajton sfidën Basic të destinacionit. Nuk konfiguron vërtetimin e proxy-t.
Nëse edhe proxy kërkon hyrje, zgjidhni veçmas një skemë të mbështetur të vërtetimit të proxy-t. Një 407 në kohën e CONNECT ndodh përpara se destinacioni të mund të lëshojë sfidën e vet. Shtimi i kredencialeve të faqes te menaxheri i fjalëkalimeve nuk mund ta plotësojë atë shkëmbim të mëparshëm.
Thirrja e opener.open() drejtpërdrejt mban konfigurimin bashkë me operacionin. Nuk ka nevojë të ndryshohet parazgjedhja në nivel moduli, përveç nëse aplikacioni dëshiron qëllimisht që të gjitha thirrjet e përshtatshme të ndajnë këtë opener.