Python urllib : désactiver les proxys pour un seul opener
Créez un opener urllib en connexion directe avec ProxyHandler({}), sans modifier les autres clients ni l’environnement du processus.
Passez une correspondance vide à ProxyHandler lorsqu’un seul opener urllib doit se connecter directement :
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
Le dictionnaire vide ne fournit aucune route de proxy. Omettre la correspondance laisse au contraire le gestionnaire découvrir les proxys dans son environnement et les paramètres de la plateforme. Ces deux constructions expriment des politiques différentes.
L’exemple utilise la bibliothèque standard de Python et conserve la vérification HTTPS normale. Le bloc with ferme la réponse, y compris lorsqu’une exception fait sortir du bloc.
Requêtes directes et via un proxy dans la même application
Deux openers peuvent porter les deux politiques sans modifier les variables d’environnement entre les appels :
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}))
with proxied.open("https://example.com/", timeout=10) as response:
print(response.status)
Remplacez l’adresse de bouclage par votre proxy HTTP, ou choisissez un candidat dans la liste de proxys HTTP pour la comparaison via proxy. Il peut acheminer la connexion vers la destination HTTPS par CONNECT si le service l’autorise. Le protocole et l’authentification pris en charge par le point d’écoute doivent correspondre au gestionnaire.
Ne pas modifier l’opener par défaut
Appelez direct.open ou proxied.open sur l’objet responsable de la route. install_opener change la valeur par défaut à l’échelle du processus utilisée par les fonctions simplifiées d’urllib ; une bibliothèque qui l’utilise peut donc affecter du code sans rapport. Ce n’est pas nécessaire pour l’opener isolé ci-dessus.
L’argument timeout est un paramètre d’opération, pas une limite de temps réel couvrant l’intégralité de chaque transfert. Ne lisez que les données nécessaires et prévoyez une échéance de niveau supérieur si la tâche impose un budget total strict.
Ces objets opener ne modifient ni le client d’une autre bibliothèque, ni un processus existant, ni les paramètres de proxy d’un navigateur.