0% ont trouvé ce document utile (0 vote)
3 vues3 pages

Request

Le document présente une explication détaillée de la bibliothèque requests en Python, en mettant l'accent sur la gestion des erreurs, les différences entre les requêtes GET et POST, ainsi que l'utilisation des en-têtes et des paramètres. Il fournit également une solution complète à un exercice pratique utilisant l'API GitHub pour extraire des informations sur un utilisateur. Les bonnes pratiques de sécurité et de robustesse, telles que la gestion des délais d'attente et l'utilisation de la méthode .get() pour accéder aux données JSON, sont également abordées.

Transféré par

sosthenefreddy
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues3 pages

Request

Le document présente une explication détaillée de la bibliothèque requests en Python, en mettant l'accent sur la gestion des erreurs, les différences entre les requêtes GET et POST, ainsi que l'utilisation des en-têtes et des paramètres. Il fournit également une solution complète à un exercice pratique utilisant l'API GitHub pour extraire des informations sur un utilisateur. Les bonnes pratiques de sécurité et de robustesse, telles que la gestion des délais d'attente et l'utilisation de la méthode .get() pour accéder aux données JSON, sont également abordées.

Transféré par

sosthenefreddy
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Voici une explication détaillée et structurée de votre cours sur la bibliothèque requests, suivie de la résolution

complète de l'exercice pratique.

Part 1: Explication détaillée des Notes et des Codes


La bibliothèque requests est le standard de facto en Python pour interagir avec le Web. Elle remplace des
modules natifs plus complexes comme urllib.

1. Structure globale de la gestion des erreurs (Le bloc try / except)


Dans vos trois exemples de code, l'utilisation de try...except avec response.raise_for_status() est la
meilleure pratique absolue.

En cybersécurité ou en automatisation, un script ne doit jamais planter brutalement si un site est hors ligne
ou si l'API renvoie une erreur. requests propose une hiérarchie d'exceptions très précise :

HTTPError : Déclenché par raise_for_status(). Utile si le serveur répond, mais avec un code d'erreur
(ex: 404 Not Found ou 500 Internal Server Error).

ConnectionError : Le serveur est injoignable (problème de DNS, coupure réseau).

Timeout : Le serveur a mis trop de temps à répondre (très important pour éviter qu'un script ne reste
bloqué indéfiniment).

RequestException : La classe mère. Elle capture toutes les erreurs qui n'ont pas été attrapées par les
blocs précédents.

2. Zoom sur les méthodes : GET vs POST

Caractéristique Requête GET ([Link]) Requête POST ([Link])

Objectif Envoyer/Soumettre des données au


Récupérer/Demander des données.
principal serveur.

Passage de Via l'URL (paramètres visibles : ? Dans le corps (body) de la requête


données q=python). (invisible dans l'URL).

Moins adapté aux données sensibles Adapté aux formulaires, mots de


Sécurité
(exposé dans l'historique). passe, fichiers.

Utilisation
params={...} data={...} (ou json={...})
Python

3. Les En-têtes (Headers) et Paramètres (Params)


params : Transforme automatiquement un dictionnaire en chaîne de requête URL. C'est plus propre et
évite les erreurs de syntaxe ou d'encodage des espaces (ex: transforme "python cybersecurity" en
python%20cybersecurity).

headers (et le User-Agent) : Par défaut, requests envoie un en-tête qui dit ouvertement : "User-
Agent": "python-requests/x.x.x". De nombreux pare-feu applicatifs (WAF) ou serveurs web bloquent cet
en-tête pour éviter le scraping ou les attaques automatisées. Modifier le User-Agent pour simuler un
vrai navigateur (comme Chrome ou Firefox) est la première technique de contournement
apprise en cybersécurité.

Part 2: Résolution de l'Exercice Pratique


Pour répondre aux 5 consignes de l'exercice, nous allons utiliser une API publique gratuite, stable et qui ne
nécessite pas de clé d'authentification : l'API publique GitHub (endpoint de recherche d'utilisateurs).

Code Solution Complet


Python
import requests

# 1. Définition de l'URL de l'API et des paramètres


# Nous allons chercher les informations de l'utilisateur officiel "python"
url = "[Link]

# Ajout d'un User-Agent personnalisé (Bonne pratique)


headers = {
"User-Agent": "MonScriptPedagogique/1.0 (Contact: edu@[Link])"
}

try:
print("Envoi de la requête GET en cours...")
# 2. Envoi de la requête GET avec un timeout de 5 secondes
response = [Link](url, headers=headers, timeout=5)

# Vérification du statut (lève une exception si code 4xx ou 5xx)


response.raise_for_status()

# 3. Affichage du code d'état de la réponse


print(f"[-] Code d'état HTTP : {response.status_code} (Succès)\n")

# 4. Parsing de la réponse JSON


data = [Link]()

# Extraction de deux informations spécifiques


nom_public = [Link]("name", "Non spécifié")
nombre_repos = [Link]("public_repos", 0)
biographie = [Link]("bio", "Aucune biographie")

print("=== INFORMATIONS EXTRAITES ===")


print(f"-> Nom de l'organisation/utilisateur : {nom_public}")
print(f"-> Nombre de dépôts (repositories) publics : {nombre_repos}")
print(f"-> Biographie : {biographie}")
print("==============================")

# 5. Gestion complète des erreurs potentielles


except [Link] as errh:
print(f"[!] Erreur HTTP survenue : {errh}")
except [Link] as errc:
print(f"[!] Erreur de connexion. Vérifiez votre réseau : {errc}")
except [Link] as errt:
print(f"[!] Délai d'attente dépassé (Timeout) : {errt}")
except [Link] as err:
print(f"[!] Une erreur inattendue est survenue : {err}")

Explication des points clés de la résolution :


1. Le choix de l'API : L'URL [Link] renvoie les détails du profil GitHub de
l'organisation Python au format JSON.

2. Sécurité et robustesse (timeout) : J'ai ajouté timeout=5. Si le serveur de GitHub ne répond pas dans
les 5 secondes, le script passe directement dans le bloc except [Link] au lieu de
geler le terminal.

3. Extraction propre (.get()) : Pour extraire les informations du dictionnaire JSON ([Link]("name")), on
utilise la méthode .get() de Python plutôt que data["name"]. C'est une sécurité supplémentaire : si la clé
n'existe pas dans l'API, le script renvoie "Non spécifié" au lieu de planter avec une erreur KeyError.

Avez-vous des questions sur la manipulation des dictionnaires JSON reçus ou souhaitez-vous voir comment
envoyer un fichier via une requête POST ?

Vous aimerez peut-être aussi