Gérer les requêtes HTTP avec Requests
Requests est une bibliothèque Python simple et puissante pour envoyer des requêtes HTTP. Elle permet d’interagir facilement avec des API ou de récupérer des données depuis des sites web. Grâce à sa syntaxe intuitive, Requests facilite l’envoi de requêtes HTTP de différents types (GET, POST, PUT, DELETE, etc.) et la gestion des réponses. Elle permet également de gérer les paramètres de requêtes, les en-têtes, l’authentification, et de télécharger des fichiers ou des données en JSON. Cette bibliothèque est largement utilisée pour effectuer des appels API, scraper des pages web statiques ou interagir avec des services web.
Fonctions :
-
requests.get()
La fonction requests.get() envoie une requête HTTP GET, qui est utilisée pour récupérer des ressources depuis un serveur, comme une page web ou des données d'une API.
Importation :
import requests
Attributs :
Paramètre Description url
URL à laquelle la requête GET est envoyée. params
Paramètres facultatifs sous forme de dictionnaire (optionnel). timeout
Durée maximale d'attente avant d'abandonner la requête (optionnel). headers
En-têtes HTTP personnalisés (optionnel). status_code
Code de statut HTTP renvoyé par le serveur. Exemple de code :
import requests # Faire une requête GET url = 'https://www.example.com' response = requests.get(url) # Vérifier si la requête a réussi if response.status_code == 200: print("Requête réussie !") print(response.text) # Affiche le contenu de la page else: print(f"Erreur {response.status_code}")
Explication du code :
import requests
importe la bibliothèque requests, utilisée pour effectuer des requêtes HTTP en Python.Faire une requête GET
url = 'https://www.example.com'
définit l'URL de la page web cible de la requête.response = requests.get(url)
envoie une requête HTTP GET à l'URL spécifiée et stocke la réponse dans la variableresponse
.Vérification de la réussite de la requête
if response.status_code == 200:
vérifie si le code de statut HTTP de la réponse est égal à 200, ce qui signifie que la requête a été réussie.Requête réussie
print("Requête réussie !")
affiche le message "Requête réussie !" si le code de statut est 200.print(response.text)
affiche le contenu HTML de la page récupéré dansresponse.text
.Gestion des erreurs
else:
si le code de statut de la réponse n'est pas 200, une erreur s'affiche.print(f"Erreur {response.status_code}")
affiche un message d'erreur contenant le code de statut HTTP si la requête échoue. -
requests.post()
La fonction requests.post() envoie une requête HTTP POST, souvent utilisée pour envoyer des données au serveur, comme des informations de formulaire ou des données JSON.
Importation :
import requests
Attributs :
Paramètre Description url
URL à laquelle la requête POST est envoyée. data
Données à envoyer dans le corps de la requête (sous forme de dictionnaire). json
Données à envoyer au format JSON (optionnel). timeout
Durée d'attente en secondes avant l'expiration (optionnel). Exemple de code :
# Faire une requête POST url = 'https://www.example.com/login' data = {'username': 'user', 'password': 'pass'} response = requests.post(url, data=data) # Vérifier la réponse if response.status_code == 200: print("Connexion réussie !") else: print(f"Erreur {response.status_code}")
Explication du code :
Faire une requête POST
url = 'https://www.example.com/login'
définit l'URL de la page web cible pour la requête POST, ici une page de connexion.data = {'username': 'user', 'password': 'pass'}
crée un dictionnairedata
contenant les données envoyées avec la requête POST, ici les informations de connexion (nom d'utilisateur et mot de passe).response = requests.post(url, data=data)
envoie la requête HTTP POST à l'URL spécifiée, avec les données de connexion, et stocke la réponse dans la variableresponse
.Vérification de la réponse
if response.status_code == 200:
vérifie si le code de statut HTTP de la réponse est égal à 200, ce qui signifie que la connexion a réussi.Connexion réussie
print("Connexion réussie !")
affiche le message "Connexion réussie !" si le code de statut est 200, indiquant que la connexion a fonctionné.Gestion des erreurs
else:
si le code de statut de la réponse n'est pas 200, une erreur s'affiche.print(f"Erreur {response.status_code}")
affiche un message d'erreur contenant le code de statut HTTP si la connexion échoue. -
requests.head()
La fonction requests.head() envoie une requête HTTP HEAD, qui est similaire à GET, mais elle ne récupère que les en-têtes de la réponse et pas le corps.
Importation :
import requests
Attributs :
Paramètre Description url
URL de la page dont on souhaite récupérer les en-têtes. headers
Dictionnaire des en-têtes de la réponse (par exemple, type de contenu, date, etc.). Exemple de code :
import requests # Faire une requête HEAD pour obtenir seulement les en-têtes url = 'https://www.example.com' response = requests.head(url) # Afficher les en-têtes de la réponse print(response.headers)
Explication du code :
Faire une requête HEAD
url = 'https://www.example.com'
définit l'URL de la page web cible pour la requête HEAD.response = requests.head(url)
envoie une requête HTTP HEAD à l'URL spécifiée, qui ne récupère que les en-têtes de la réponse, sans le corps.Affichage des en-têtes
print(response.headers)
affiche les en-têtes de la réponse HTTP, accessibles viaresponse.headers
, ce qui permet de voir des informations comme le type de contenu, la date de la réponse, etc. -
requests.put()
La fonction requests.put() envoie une requête HTTP PUT, souvent utilisée pour mettre à jour une ressource existante sur un serveur.
Importation :
import requests
Attributs :
Paramètre Description url
URL de l'API ou de la ressource à mettre à jour. data
Données à envoyer dans le corps de la requête (sous forme de dictionnaire). Exemple de code :
# Faire une requête PUT url = 'https://api.example.com/update' data = {'id': 123, 'status': 'active'} response = requests.put(url, data=data) # Vérifier la réponse if response.status_code == 200: print("Données mises à jour avec succès !") else: print(f"Erreur {response.status_code}")
-
requests.delete()
La fonction requests.delete() envoie une requête HTTP DELETE pour supprimer une ressource existante sur un serveur.
Importation :
import requests
Attributs :
Paramètre Description url
URL de la ressource à supprimer. Exemple de code :
# Faire une requête DELETE url = 'https://api.example.com/delete/123' response = requests.delete(url) # Vérifier la réponse if response.status_code == 200: print("Ressource supprimée avec succès !") else: print(f"Erreur {response.status_code}")
-
requests.Session()
Utiliser une session (requests.Session) permet de maintenir certaines informations de la requête, comme les cookies et les en-têtes, entre les requêtes. Cela peut simuler un comportement plus naturel en gardant une "session" active, ce qui peut éviter les blocages.
Exemple de code :
import requests # Créer une session session = requests.Session() # Ajouter un user-agent personnalisé pour la session session.headers.update({ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' }) # Faire une requête GET avec la session url = 'https://www.example.com' response = session.get(url) # Vérifier la réponse if response.status_code == 200: print("Requête réussie avec session !") else: print(f"Erreur {response.status_code}")
Explication du code :
La
Session
conserve l'état des connexions, y compris les cookies et les en-têtes. Cela permet d'effectuer plusieurs requêtes sans avoir à redéfinir manuellement les headers et cookies à chaque fois. Le code montre comment configurer unuser-agent
personnalisé pour la session et comment envoyer une requête GET en utilisant cette session. -
Gestion des cookies
Les cookies peuvent être utilisés pour maintenir l'état entre les requêtes. Si un site exige une forme d'authentification ou de suivi, les cookies permettent de simuler une session valide et d'éviter les blocages.
Exemple de code :
import requests # Créer une session session = requests.Session() # Faire une première requête pour récupérer les cookies url = 'https://www.example.com/login' response = session.get(url) # Utiliser les cookies récupérés pour une autre requête data = {'username': 'user', 'password': 'pass'} response = session.post(url, data=data) # Vérifier la réponse if response.status_code == 200: print("Connexion réussie avec cookies !") else: print(f"Erreur {response.status_code}")
Explication du code :
La session est utilisée pour maintenir les cookies entre les requêtes. Après une première requête pour récupérer les cookies (par exemple, une page de connexion), nous utilisons ces cookies pour effectuer une autre requête (comme un
POST
pour se connecter). -
Simulation de délais entre les requêtes
Pour éviter que votre activité ne soit perçue comme suspecte (scraping trop rapide), vous pouvez simuler des délais (comme un intervalle entre les requêtes).
Exemple de code :
import requests import time # Faire une requête avec délai simulé url = 'https://www.example.com' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'} # Faire une requête GET avec un délai entre les requêtes response = requests.get(url, headers=headers) time.sleep(3) # Délai de 3 secondes entre les requêtes # Vérifier la réponse if response.status_code == 200: print("Requête réussie avec délai !") else: print(f"Erreur {response.status_code}")
Explication du code :
Ici, après chaque requête, nous utilisons la fonction
time.sleep(3)
pour ajouter un délai de 3 secondes avant la prochaine requête. Cela imite mieux le comportement humain, qui prend généralement du temps entre les interactions, et réduit le risque d'être bloqué. -
Vérification de la réponse HTTP pour détecter les blocages
Il est important de vérifier si une requête a échoué en raison de restrictions côté serveur. Vous pouvez analyser les codes d'état HTTP comme 403 (Accès interdit) ou 503 (Service indisponible).
Exemple de code :
import requests # Faire une requête GET url = 'https://www.example.com' response = requests.get(url) # Vérifier les codes d'état HTTP if response.status_code == 200: print("Requête réussie !") elif response.status_code == 403: print("Accès interdit : Le site a peut-être détecté un bot.") elif response.status_code == 503: print("Service indisponible : Réessayez plus tard.") else: print(f"Erreur {response.status_code}")
Explication du code :
Le code vérifie les codes d'état HTTP retournés par la requête. Un code
403
indique que l'accès est interdit, souvent à cause de la détection d'un bot. Un code503
signifie que le service est temporairement indisponible, et un code200
signifie que la requête a réussi.