Python urllib: autenticación básica do proxy para peticións HTTP
Construíde un opener de urllib explícito para un desafío Basic dun proxy HTTP e distinguide este intercambio HTTP ordinario da autenticación HTTPS CONNECT.
Para un desafío Basic dun proxy HTTP, usade ProxyBasicAuthHandler. Este exemplo HTTP ordinario mantén a ruta e a conta nun único 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)Usade o extremo real e a conta que fornece o operador. O controlador usa o xestor de contrasinais para o desafío do proxy; facede coincidir o URI e o realm previstos do proxy. A autenticación Basic no destino usa outro controlador.
Chamar o opener directamente mantén esta configuración local. O URL da petición segue a ser o sitio web, non o intermediario. Esta ruta HTTP en claro non cifra un intercambio Basic.
Non deduzades deste exemplo compatibilidade con túneles HTTPS. Un 407 durante CONNECT ocorre na configuración, antes dunha resposta ordinaria do destino; a integración elixida debe xestionar alí a autenticación. Cambiar o controlador de inicio de sesión do sitio non pode reparar ese desafío anterior.
Os URL de proxy con credenciais son outro formato que aparece en exemplos antigos. Se se usan, codificade correctamente os delimitadores do URL e mantede o URL resultante con segredo fóra dos rexistros.