Python urllib: autenticación básica del proxy para peticiones HTTP
Cree un opener de urllib explícito para un desafío Basic de un proxy HTTP y distinga este intercambio HTTP ordinario de la autenticación HTTPS CONNECT.
Para un desafío Basic de un proxy HTTP, use ProxyBasicAuthHandler. Este ejemplo HTTP ordinario mantiene la ruta y la cuenta en 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)Use el extremo real y la cuenta que proporcione el operador. El controlador usa el gestor de contraseñas para el desafío del proxy; haga coincidir el URI y el realm previstos del proxy. La autenticación Basic en el destino usa otro controlador.
Llamar al opener directamente mantiene esta configuración local. La URL de la petición sigue siendo el sitio web, no el intermediario. Esta ruta HTTP en claro no cifra un intercambio Basic.
No deduzca de este ejemplo compatibilidad con túneles HTTPS. Un 407 durante CONNECT ocurre en la configuración, antes de una respuesta ordinaria del destino; la integración elegida debe gestionar la autenticación ahí. Cambiar el controlador de inicio de sesión del sitio no puede reparar ese desafío anterior.
Las URL de proxy con credenciales son otro formato que aparece en ejemplos antiguos. Si se usan, codifique correctamente los delimitadores de la URL y mantenga la URL resultante con secreto fuera de los registros.