Utiliser une adresse IP de proxy avec Python Requests
Définissez explicitement les routes proxy par requête dans Requests, choisissez le bon schéma de connexion et gérez les délais ainsi que les échecs de tunnel HTTPS.
Lorsque Requests est disponible dans votre projet, transmettez un dictionnaire de proxys à l’appel :
import requests
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
print(response.status_code)
Remplacez le point de connexion de bouclage par votre proxy en fonctionnement ou par un candidat de la liste de proxys HTTP que vous testerez avec cette requête. Les clés décrivent les schémas de destination : http pour les URL HTTP et https pour les URL HTTPS. Les valeurs décrivent le point d’écoute du proxy. Elles peuvent désigner des points différents si votre réseau exige des routes distinctes.
Une valeur de proxy en http:// sous la clé https est volontaire. Requests demande un tunnel CONNECT au point d’écoute HTTP, puis établit TLS avec la destination à travers ce tunnel, sous réserve des règles de destinations et de ports du proxy. Passer la valeur à https:// demande TLS vers le proxy lui-même ; cela peut échouer si son point d’écoute attend HTTP en clair.
Ce que signifient les deux valeurs de délai
timeout=(5, 15) définit les délais de connexion et de lecture. Il n’impose pas une limite totale de quinze secondes. Des données arrivant périodiquement, plusieurs adresses et des tentatives de connexion peuvent allonger la durée écoulée. Requests n’applique pas de délai général lorsque vous omettez ce réglage : choisissez des limites adaptées à la réponse et ajoutez une échéance au niveau de l’application si le travail doit respecter une durée totale stricte.
Traiter l’échec à l’étape où il survient
try:
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
except requests.exceptions.ProxyError as error:
print("Proxy setup failed:", type(error).__name__)
except requests.exceptions.Timeout:
print("A configured timeout expired")
except requests.exceptions.HTTPError as error:
print("HTTP status:", error.response.status_code)
Un CONNECT refusé peut déclencher ProxyError avant qu’une réponse de destination existe. La branche HTTPError suit une réponse reçue avec un statut d’erreur ; Timeout signifie qu’une limite configurée a expiré. Examinez localement les chaînes d’exceptions de connexion et retirez les points contenant des identifiants ainsi que les URL privées avant de les partager.
Laissez la vérification des certificats activée. Si le réseau autorisé utilise une autorité de certification privée ou une interception gérée, fournissez les éléments de confiance attendus au lieu de désactiver la vérification.
Les entrées explicites par requête contrôlent les routes indiquées ici, mais les schémas omis peuvent encore être influencés par la découverte des proxys dans l’environnement. Pour déplacer cet appel dans une Session réutilisable, décidez comment doivent interagir les variables d’environnement, les valeurs par défaut de Session et les remplacements par requête ; la réutilisation des connexions et la politique de routage sont deux choix distincts.