6.1 Pourquoi avez-vous besoin de proxy ?
De nos jours, chaque pays a son propre internet. Désormais, ce ne sont plus des utilisateurs individuels qui sont bloqués, mais des sites entiers, des domaines, des applications et même des pays. Pas cool. Mais si tu es programmeur, ce n'est pas un problème — le web est rempli de serveurs proxy...
Un serveur proxy (ou simplement proxy) est un serveur intermédiaire qui fait office de médiateur entre le client (par exemple, ton ordinateur) et le serveur auquel tu essaies d'accéder. Le serveur proxy reçoit les requêtes du client, les transmet au serveur cible, reçoit les réponses et les renvoie au client.
Chaque grand produit a au moins plusieurs serveurs proxy qui exécutent diverses fonctions utiles. Par exemple, telles que :
- Anonymisation : Un serveur proxy peut cacher la véritable adresse IP du client, fournissant un accès anonyme aux ressources internet. Une adresse IP est un identifiant unique d'un appareil sur le réseau, et la cacher aide à maintenir la confidentialité de l'utilisateur.
- Mise en cache : Un serveur proxy peut mettre en cache des ressources souvent demandées, ce qui accélère l'accès à celles-ci et réduit la charge sur les ressources réseau. Par exemple, si de nombreux utilisateurs demandent la même page web, le serveur proxy peut en sauvegarder une copie et la fournir directement, sans interroger à chaque fois le serveur d'origine.
- Filtrage de contenu : Un serveur proxy peut bloquer l'accès à certains sites web ou types de contenu, assurant ainsi contrôle et sécurité.
- Contournement des restrictions d'accès : Un serveur proxy peut aider à contourner les restrictions d'accès régionales au contenu, fournissant un accès aux ressources bloquées dans certaines zones géographiques.
- Journalisation et surveillance : Un serveur proxy peut tenir un journal de toutes les requêtes et réponses, ce qui permet de suivre et d'analyser le trafic réseau.
Principe de fonctionnement d'un serveur proxy
- Le client envoie une requête : L'appareil client (par exemple, ordinateur ou smartphone) envoie une requête au serveur proxy.
- Le serveur proxy traite la requête : Le serveur proxy reçoit la requête, peut la modifier (par exemple, ajouter ou supprimer des en-têtes) et la transmet au serveur cible.
- Le serveur cible répond : Le serveur cible traite la requête et envoie la réponse au serveur proxy.
- Le serveur proxy renvoie la réponse au client : Le serveur proxy reçoit la réponse du serveur cible, peut la mettre en cache pour une utilisation ultérieure et la transmet au client.
Avantages de l'utilisation d'un serveur proxy
- Amélioration de la sécurité : Un serveur proxy peut masquer les réseaux internes du monde extérieur, réduisant le risque d'attaques.
- Accélération de l'accès : La mise en cache des ressources souvent demandées réduit le temps d'accès à celles-ci.
- Contrôle de l'accès : Un serveur proxy peut limiter l'accès à certains sites ou types de contenu, garantissant le contrôle de l'utilisation du réseau.
- Réduction de la charge sur le réseau : Grâce à la mise en cache et au filtrage du trafic, les serveurs proxy peuvent réduire le volume général de données transmises et la charge sur le réseau.
De nombreux programmes serveurs pour des raisons de sécurité n'ont pas un accès direct à internet. Au lieu de cela, ils y accèdent via un proxy, qui a déjà une liste de sites et ressources autorisés. Ainsi, vos programmes doivent également savoir comment travailler avec un proxy.
Malgré tous les avantages, l'utilisation de serveurs proxy peut aussi avoir des inconvénients. Par exemple, cela peut entraîner une réduction de la vitesse de connexion, car les requêtes passent par un intermédiaire supplémentaire. De plus, certains sites peuvent bloquer l'accès à partir de serveurs proxy connus.
6.2 Proxy et le module requests
La bibliothèque requests prend en charge l'utilisation de serveurs proxy via le paramètre proxies.
HTTP (Hypertext Transfer Protocol) et HTTPS (HTTP Secure) sont des protocoles de transfert de données sur internet. HTTPS est une version sécurisée de HTTP. Différents serveurs proxy peuvent être utilisés pour eux, car ils peuvent nécessiter un traitement différent en raison des particularités du cryptage HTTPS.
Exemple d'utilisation d'un proxy HTTP
Un proxy transmet généralement non pas un seul proxy, mais toute une liste. C'est très pratique si certains des proxies sont bannis ou indisponibles.
Exemple d'appel de la fonction requests.get() avec passage de requête via proxy.
import requests
# URL de destination
url = 'http://httpbin.org/ip'
# Configuration du serveur proxy
proxies = { 'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080', }
# Envoi de la requête GET via le proxy
response = requests.get(url, proxies=proxies)
print(response.json())
Les requêtes http passeront par le premier serveur proxy, tandis que les requêtes https passeront par le second.
Exemple d'utilisation d'un proxy avec authentification
De nombreux serveurs proxy demandent d'abord une authentification, puis permettent de les utiliser. Une fonctionnalité intéressante peut nous aider…
Lorsque les URL ont été inventées, on a intégré dans le standard URL la possibilité de transmettre directement un identifiant et un mot de passe à une ressource. Cela ressemble à ceci :
http://user:password@domain/path
Par conséquent, si un serveur proxy nécessite une authentification, tu peux inclure les identifiants dans l'URL.
Exemple :
import requests
# URL de destination
url = 'http://httpbin.org/ip'
# Configuration du serveur proxy avec authentification
proxies = { 'http': 'http://user:password@10.10.1.10:3128',
'https': 'http://user:password@10.10.1.10:1080', }
# Envoi de la requête GET via le proxy
response = requests.get(url, proxies=proxies)
print(response.json())
Je n'ai pas vu que cela soit couramment utilisé en pratique, mais si tu montes ton propre serveur proxy de test, pourquoi pas ?
Cependant, il est à noter que transmettre identifiant et mot de passe dans l'URL peut être peu sécurisé, car l'URL peut être stockée dans l'historique du navigateur ou dans les logs du serveur. Dans les applications réelles, il convient d'utiliser des méthodes d'authentification plus sécurisées.
Il est important de se souvenir de stocker en sécurité les données d'authentification pour les serveurs proxy dans les applications réelles. Ne stockez jamais les mots de passe en clair dans le code ou dans les fichiers de configuration. Utilisez plutôt des variables d'environnement ou des stockages de secrets sécurisés.
6.3 Proxy et http.client
Pour travailler avec des serveurs proxy dans le module http.client, il faut configurer manuellement la connexion et les en-têtes de requête.
Tu dois simplement spécifier host et port lors de la création de la connexion.
Exemple :
# Configuration du serveur proxy
proxy_host = '10.10.1.10'
proxy_port = 3128
# Création de la connexion avec le serveur proxy
conn = http.client.HTTPConnection(proxy_host, proxy_port)
Ensuite, il faut établir un tunnel avec le serveur proxy, puis lui envoyer une requête :
dest_url = 'httpbin.org'
dest_path = '/ip'
# Formation et envoi de la requête
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
Pour vérifier si le serveur proxy fonctionne correctement, tu peux comparer ton adresse IP avant et après l'utilisation du proxy. Pour cela, tu peux utiliser des services qui montrent ton adresse IP actuelle, comme httpbin.org/ip.
Tout est si « simple ». L'exemple complet d'utilisation d'un proxy HTTP avec http.client sera :
import http.client
# Configuration du serveur proxy
proxy_host = '10.10.1.10'
proxy_port = 3128
dest_url = 'httpbin.org'
dest_path = '/ip'
# Création de la connexion avec le serveur proxy
conn = http.client.HTTPConnection(proxy_host, proxy_port)
# Formation et envoi de la requête
conn.set_tunnel(dest_url)
conn.request('GET', dest_path)
# Obtention de la réponse
response = conn.getresponse()
print(response.status, response.reason)
print(response.read().decode('utf-8'))
# Fermeture de la connexion
conn.close()
Que dire ? L'utilisation du module requests est, bien sûr, plus simple. Mais ! De nombreux modules et frameworks utilisent en arrière-plan précisément le http.client de bas niveau. Tu dois savoir comment travailler avec, pour que tu puisses correctement configurer leur fonctionnement.
Malgré tous les avantages, l'utilisation des serveurs proxy peut également avoir des inconvénients. Par exemple, cela peut entraîner une réduction de la vitesse de connexion, car les requêtes passent par une étape supplémentaire. De plus, certains sites peuvent bloquer l'accès à partir de serveurs proxy connus. Il est donc toujours nécessaire de peser ses avantages et ses limitations potentielles.
GO TO FULL VERSION