OUJOOD.COM
Pour communiquer avec le web depuis Python — appeler une API, télécharger une page, envoyer des données à un serveur — il faut faire des requêtes HTTP. Python inclut un module urllib pour ça, mais son interface est complexe. La bibliothèque requests fait la même chose avec une syntaxe beaucoup plus simple et lisible. C'est pourquoi elle est devenue la référence absolue dans l'écosystème Python.
Ce cours vous montre comment installer requests, faire des requêtes GET et POST, passer des paramètres et des headers, lire des réponses JSON, et gérer les erreurs proprement.
Installation
requests n'est pas dans la bibliothèque standard — il faut l'installer avec pip :
# Dans le terminal pip install requests # Vérifier l'installation python -c "import requests; print(requests.__version__)"
Faire une requête GET
Une requête GET récupère des données depuis un serveur. C'est le type de requête le plus courant — c'est ce que fait votre navigateur quand vous ouvrez une page web.
import requests
reponse = requests.get("https://httpbin.org/get")
# Code de statut HTTP
print(reponse.status_code)
# Résultat : 200 (succès)
# Contenu texte brut
print(reponse.text[:100])
# En-têtes de la réponse
print(reponse.headers["Content-Type"])
# Résultat : application/json
Lire une réponse JSON
Quand l'API retourne du JSON, utilisez directement la méthode .json() de la réponse — elle décode automatiquement le JSON en objet Python, sans avoir à appeler json.loads() manuellement.
import requests # API publique qui retourne une blague aléatoire reponse = requests.get("https://official-joke-api.appspot.com/random_joke") donnees = reponse.json() print(donnees["setup"]) print(donnees["punchline"]) # Résultat : une blague en anglais # Autre exemple : API de conversion de devises (public) url = "https://api.exchangerate-api.com/v4/latest/USD" reponse = requests.get(url) taux = reponse.json() print(f"1 USD = {taux['rates']['EUR']} EUR")
Passer des paramètres dans l'URL
Plutôt que de construire l'URL à la main avec des ?clé=valeur, passez un dictionnaire au paramètre params. Requests encode automatiquement les valeurs et construit l'URL correcte.
import requests # Recherche sur l'API Wikipedia (public, sans clé) url = "https://fr.wikipedia.org/w/api.php" parametres = { "action": "opensearch", "search": "Python", "limit": 3, "format": "json" } reponse = requests.get(url, params=parametres) # L'URL construite automatiquement : print(reponse.url) # https://fr.wikipedia.org/w/api.php?action=opensearch&search=Python&limit=3&format=json resultats = reponse.json() print(resultats[1]) # Résultat : liste des titres trouvés
Ajouter des headers
Certaines APIs exigent des en-têtes HTTP particuliers : un token d'authentification, un type de contenu accepté, un User-Agent. Passez-les dans un dictionnaire au paramètre headers.
import requests
headers = {
"User-Agent": "MonScript/1.0",
"Accept": "application/json",
"Authorization": "Bearer mon_token_ici"
}
reponse = requests.get(
"https://api.exemple.com/donnees",
headers=headers
)
print(reponse.status_code)
Faire une requête POST
Une requête POST envoie des données au serveur — un formulaire soumis, des données à créer, une connexion. Le paramètre json sérialise automatiquement le dictionnaire et ajoute l'en-tête Content-Type: application/json.
import requests # httpbin.org est un service de test HTTP public url = "https://httpbin.org/post" donnees = { "nom": "Alice", "age": 30, "ville": "Paris" } # Envoyer du JSON dans le corps de la requête reponse = requests.post(url, json=donnees) print(reponse.status_code) # Résultat : 200 resultat = reponse.json() print(resultat["json"]) # Résultat : {'nom': 'Alice', 'age': 30, 'ville': 'Paris'}
Gérer les erreurs HTTP
Une requête peut échouer pour plusieurs raisons : serveur inaccessible, URL inexistante (404), accès refusé (403), erreur serveur (500). La méthode raise_for_status() lève automatiquement une exception si le code de statut indique une erreur.
import requests
try:
reponse = requests.get("https://httpbin.org/status/404", timeout=5)
reponse.raise_for_status()
# Si on arrive ici, la requête a réussi
donnees = reponse.json()
except requests.exceptions.HTTPError as e:
print(f"Erreur HTTP : {e}")
# Résultat : Erreur HTTP : 404 Client Error: NOT FOUND
except requests.exceptions.ConnectionError:
print("Impossible de joindre le serveur.")
except requests.exceptions.Timeout:
print("La requête a dépassé le délai imparti.")
except requests.exceptions.RequestException as e:
print(f"Erreur inattendue : {e}")
Le paramètre timeout=5 fixe un délai maximum en secondes. Sans lui, votre script peut bloquer indéfiniment si le serveur ne répond pas.
Télécharger un fichier
Pour télécharger un fichier volumineux sans le charger entièrement en mémoire, utilisez stream=True et écrivez les données par blocs.
import requests
url = "https://www.w3.org/WAI/WCAG21/wcag21.pdf"
with requests.get(url, stream=True, timeout=10) as reponse:
reponse.raise_for_status()
with open("document.pdf", "wb") as f:
for bloc in reponse.iter_content(chunk_size=8192):
f.write(bloc)
print("Téléchargement terminé.")
Utiliser une session pour plusieurs requêtes
Quand vous faites plusieurs requêtes vers le même serveur, une Session réutilise la connexion TCP et les cookies entre les appels. C'est plus efficace qu'une nouvelle connexion à chaque fois, et pratique pour les APIs qui requièrent une authentification persistante.
import requests # Créer une session avec des headers communs with requests.Session() as session: session.headers.update({ "User-Agent": "MonApp/1.0", "Authorization": "Bearer mon_token" }) # Les headers sont envoyés automatiquement à chaque requête r1 = session.get("https://api.exemple.com/utilisateurs") r2 = session.get("https://api.exemple.com/produits") print(r1.status_code, r2.status_code)
Par carabde | Mis à jour le 21 avril 2026