Python Requests : identifiants Basic distincts pour le proxy et le site
Fournissez l'identifiant Basic du proxy via son URL et celui du site de destination via l'argument auth de Requests.
Le proxy du bureau demande un compte. Le site derrière en demande un autre. Requests a des entrées distinctes pour ces deux identifiants Basic : les informations d'identification dans l'URL du proxy et l'argument auth de la requête.
from urllib.parse import quote
import requests
proxy_url = (
f"http://{quote(proxy_user, safe='')}:"
f"{quote(proxy_password, safe='')}@proxy.example:8080"
)
response = requests.get(
"https://reports.example/private/",
proxies={"https": proxy_url},
auth=(site_user, site_password),
timeout=(5, 20),
)
response.raise_for_status()
Les quatre variables de compte viennent de la configuration des identifiants de l'application. Encoder séparément le nom d'utilisateur et le mot de passe du proxy préserve des caractères comme l'arobase sans les transformer en délimiteurs d'URL.
La clé https du dictionnaire choisit cette route pour une destination HTTPS. Sa valeur commence toujours par http://, car c'est le protocole utilisé pour joindre ce proxy d'exemple.
Pour cette requête HTTPS, l'identifiant du proxy appartient à l'échange CONNECT. L'identifiant du site appartient à la requête suivante, à travers le tunnel établi. Laisser l'adaptateur dériver l'autorisation du proxy depuis sa propre URL la maintient au bon saut ; aucune classe d'authentification combinée n'est nécessaire pour ce cas Basic.
Un 407 signale le défi de l'intermédiaire. Un 401 renvoyé par le site signale le défi de la destination. Servez-vous de cette réponse pour décider lequel des deux comptes configurés demande votre attention.