ProxyManager dispose d'un argument distinct proxy_headers pour les en-têtes envoyés à l'intermédiaire. Pour un proxy qui accepte l'authentification 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)

Pour une destination HTTP simple, ces en-têtes voyagent avec la requête transmise vers le proxy. Pour une destination HTTPS via CONNECT, ils relèvent de la mise en place du tunnel et non de chaque requête chiffrée vers le site.

L'argument ordinaire headers décrit les en-têtes de requête de destination. Cette authentification de proxy concerne un autre destinataire. Y placer le compte du proxy n'équivaut pas à configurer l'échange CONNECT précédent.

make_headers construit la valeur de l'en-tête Basic. Il ne négocie pas NTLM, ne sélectionne pas automatiquement un schéma pris en charge et ne prouve pas que le proxy accepte ce compte.

Un proxy doté d'un écouteur TLS ajoute un contexte TLS de proxy distinct. Le point de terminaison http:// ci-dessus décrit délibérément un écouteur HTTP ordinaire transportant une destination HTTPS via un tunnel.

Articles similaires