urllib3 ProxyManager : envoyer les identifiants Basic dans proxy_headers
Fournissez les identifiants de proxy Basic via ProxyManager.proxy_headers afin qu'ils soient disponibles pendant HTTPS CONNECT sans devenir des en-têtes de destination.
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.