Per una richiesta Basic di un proxy HTTP usate ProxyBasicAuthHandler. Questo esempio HTTP ordinario mantiene la rotta e l'account in un solo 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)

Usate l'endpoint reale e l'account fornito dall'operatore. Il gestore usa il gestore delle password per la richiesta del proxy; fate coincidere l'URI e il realm previsti del proxy. L'autenticazione Basic sulla destinazione usa un altro gestore.

Chiamare l'opener direttamente mantiene questa configurazione locale. L'URL della richiesta resta il sito web, non l'intermediario. Questa rotta HTTP in chiaro non cifra uno scambio Basic.

Non deducete da questo esempio il supporto ai tunnel HTTPS. Un 407 durante CONNECT avviene in fase di configurazione, prima di una risposta ordinaria della destinazione; l'integrazione scelta deve gestire lì l'autenticazione. Cambiare il gestore di accesso del sito non può riparare quella richiesta precedente.

Gli URL proxy con credenziali sono un altro formato presente negli esempi più vecchi. Se usati, codificate correttamente i delimitatori dell'URL e tenete l'URL risultante con il segreto fuori dai log.

Articoli correlati