ProxyManager tiene un argumento independiente proxy_headers para las cabeceras que se envían al intermediario. Para un proxy que acepta autenticación Basic:

import urllib3

proxy_headers = urllib3.make_headers(
    proxy_basic_auth=f'{proxy_user}:{proxy_password}'
)
with urllib3.ProxyManager(
    'http://proxy.example:8080',
    proxy_headers=proxy_headers,
    timeout=urllib3.Timeout(connect=5, read=10),
) as http:
    response = http.request('GET', 'https://service.example/data')
    print(response.status)

Para un destino HTTP simple, estas cabeceras viajan con la solicitud reenviada hacia el proxy. Para un destino HTTPS mediante CONNECT, pertenecen a la configuración del túnel y no a cada solicitud cifrada al sitio web.

El argumento ordinario headers describe las cabeceras de solicitud del destino. Esta autenticación de proxy pertenece a otro destinatario. Colocar allí la cuenta del proxy no equivale a configurar el intercambio CONNECT anterior.

make_headers construye el valor de la cabecera Basic. No negocia NTLM, no selecciona automáticamente un esquema compatible ni demuestra que el proxy acepte esa cuenta.

Un proxy con un listener TLS añade un contexto TLS de proxy aparte. El endpoint http:// anterior describe deliberadamente un listener HTTP ordinario que transporta un destino HTTPS por un túnel.

Artículos relacionados