install_opener() birritan deitzeak ez dio bigarren opener-a lehenengoari gehitzen. Moduluaren opener lehenetsia ordezten du. Objektu batek proxy-a ezagutzen badu eta beste batek webguneko saioa, eraiki opener bakarra beharrezko handler-ekin.

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-a eta helmuga adibideak dira. HTTP proxy publiko baten bidez irisgarri den zerbitzu publiko baterako, HTTP proxy zerrendak hautagai endpoint-ak ematen ditu bideratze-handler-erako. Opener honek HTTPS eskaera HTTP proxy-tik bideratzen du eta helmugaren Basic erronka kudeatzen du. Ez du proxy autentifikazioa konfiguratzen.

Proxy-ak ere saioa eskatzen badu, aukeratu babestutako proxy autentifikazio ezarpena bereizita. 407 CONNECT unean gertatzen da helmugak bere erronka eman baino lehen. Webguneko kredentzialak pasahitz-kudeatzailean gehitzeak ezin ditu truke lehenago hori bete.

opener.open() zuzenean deitzeak konfigurazioa eragiketarekin mantentzen du. Ez da beharrezkoa modulu osoko lehenetsia aldatzea, aplikazioak nahita nahi ez badu dei eroso guztiek opener hau partekatzea.

Erlazionatutako artikuluak