Construire une requête HTTP
Objectif : Envoyer une requête GET à un service de taux de change et définir un délai maximal d’attente.
Votre suivi de dépenses connaît des montants en euros, mais vous souhaitez interroger un service distant pour obtenir un taux de change. Une requête réseau peut attendre longtemps si le serveur ne répond pas ; il faut donc fixer une limite dès la construction de l’appel. Dans cette leçon, vous envoyez la requête et récupérez sa réponse brute, sans encore en examiner le contenu.
Préparer une requête GET
La bibliothèque requests est déjà installée et consignée dans requirements.txt, comme vous l’avez fait dans « Lister les dépendances du projet ». Une requête HTTP GET demande une ressource au serveur sans lui transmettre de données à modifier. Pour le taux de change, l’adresse de base identifie le service et les paramètres précisent les devises demandées.
import requests
URL_TAUX = "https://api.frankfurter.app/latest"
def obtenir_reponse_taux(source="EUR", cible="USD"):
"""Envoie une requête de taux et retourne la réponse HTTP brute."""
parametres = {
"from": source,
"to": cible,
}
reponse = requests.get(URL_TAUX, params=parametres, timeout=5)
return reponse
if __name__ == "__main__":
obtenir_reponse_taux()
print("Requête de taux envoyée.")L’option params laisse requests encoder les valeurs et construire l’URL complète. Avec les valeurs par défaut, la requête vise https://api.frankfurter.app/latest?from=EUR&to=USD. Vous pouvez changer les deux codes de devise à l’appel de la fonction, sans fabriquer vous-même une chaîne d’URL.
Limiter l’attente réseau
L’argument timeout=5 fixe une limite d’attente de cinq secondes pour la communication avec le service. Sans cette limite, le programme peut rester bloqué pendant une durée indéterminée lorsque le réseau ou le serveur ralentit. Cette durée est un choix de configuration : vous pouvez l’ajuster selon les besoins de votre application, mais ne supprimez pas la limite.
Exécuter le module
Enregistrez le fichier sous depenses/change.py, puis lancez-le depuis la racine du projet avec l’interpréteur de votre environnement virtuel. Le point d’entrée du module déclenche une requête avec les valeurs par défaut et affiche un message uniquement si l’appel se termine sans exception. La réponse est retournée par obtenir_reponse_taux, mais le programme ne l’affiche pas et n’en déduit encore aucun taux.
python -m depenses.changeRequête de taux envoyée.Le résultat indiqué suppose que le service est joignable et répond dans le délai fixé. Si la connexion échoue ou dépasse la limite, l’appel lève une exception et le message de confirmation ne s’affiche pas. Vous ne devez pas conclure que le taux est disponible à partir de ce seul message : il confirme seulement que l’appel est revenu sans interruption.
À retenir
- Utilisez `requests.get` pour envoyer une requête HTTP GET.
- Transmettez les valeurs de recherche avec `params` plutôt qu’en assemblant l’URL manuellement.
- Fixez un argument `timeout` pour borner l’attente réseau.
- À ce stade, la fonction retourne la réponse brute ; son statut et son contenu seront étudiés dans la prochaine leçon.
Dans la leçon suivante, vous vérifierez la réponse HTTP et en extrairez le taux demandé après avoir confirmé que les données reçues sont utilisables.