Per a un repte Basic d'un proxy HTTP, feu servir ProxyBasicAuthHandler. Aquest exemple HTTP ordinari manté la ruta i el compte en un sol 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)

Feu servir el punt final real i el compte proporcionat per l'operador. El gestor utilitza el gestor de contrasenyes per al repte del proxy; feu coincidir l'URI i el realm previstos del proxy. L'autenticació Basic de destinació fa servir un altre gestor.

Cridar l'opener directament manté aquesta configuració local. L'URL de la petició segueix sent el lloc web, no l'intermediari. Aquesta ruta HTTP en clar no xifra un intercanvi Basic.

No deduïu d'aquest exemple que hi hagi suport de túnel HTTPS. Un 407 durant CONNECT passa en la configuració, abans d'una resposta ordinària del destí; la integració triada ha de gestionar l'autenticació allà. Canviar el gestor d'inici de sessió del lloc no pot reparar aquell repte anterior.

Els URL de proxy amb credencials són un altre format que apareix en exemples antics. Si els feu servir, codifiqueu correctament els delimitadors de l'URL i manteniu l'URL resultant amb secret fora dels registres.

Articles relacionats