CodeGym /Cours /Python SELF FR /Travailler avec le réseau en pratique

Travailler avec le réseau en pratique

Python SELF FR
Niveau 23 , Leçon 3
Disponible

4.1 Traitement des réponses

Le module requests offre des méthodes pratiques pour travailler avec les réponses du serveur.

Codes de statut

En plus de la réponse, le serveur envoie également un statut de traitement de la requête. L'information sur le statut est contenue dans les champs status_code et reason. Exemple ci-dessous :


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)  # Affiche le code de statut de la réponse
print(response.reason)  # Affiche la description textuelle du statut
print(response.ok)  # Retourne True si le code de statut est inférieur à 400
        

En-têtes

Et bien sûr, quelle requête HTTP sans en-têtes ? Si tu as besoin des en-têtes de la requête ou de la réponse, tu peux y accéder via le champ headers :


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers)  # Affiche les en-têtes de la réponse
print(response.headers['Content-Type'])  # Affiche la valeur d'un en-tête spécifique
            

Corps de la réponse

La réponse du serveur peut contenir un ensemble d'octets, du texte, json ou xml. Si tu sais exactement ce que tu demandes au serveur, tu peux directement obtenir l'objet du type voulu en utilisant l'une des méthodes/champs :


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text)  # Affiche le corps de la réponse sous forme de texte
print(response.json())  # Affiche le corps de la réponse sous forme de JSON
print(response.content)  # Affiche le corps de la réponse sous forme d'octets
        

Tu apprendras plus en détail sur les en-têtes (headers) et les statuts des réponses dans les cours sur le fonctionnement du réseau.

4.2 Gestion des erreurs

Le module requests offre des exceptions pour gérer les erreurs.

Le standard HTTP ne prévoit pas d'exceptions, à la place il fonctionne avec des codes d'erreur (status_code). Si tu veux qu'une exception Python soit générée en cas de requête échouée, tu dois appeler explicitement la fonction raise_for_status().

Exemple :


import requests

try:
    response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
    response.raise_for_status()  # Génère une exception pour les codes de statut 4xx et 5xx
except requests.exceptions.HTTPError as err:
    print(f"Une erreur HTTP est survenue : {err}")
except Exception as err:
    print(f"Une autre erreur est survenue : {err}")
else:
    print("Succès !")
        

Tu peux en apprendre plus sur les codes d'erreur dans les cours sur le fonctionnement du réseau.

4.3 Envoi de données

Avant l'invention du JSON, les grandes quantités de données étaient envoyées via un "formulaire". Un formulaire est un objet spécial de la page du navigateur (et un standard de données dans HTTP). Si tu veux envoyer des données "via un formulaire", tu dois simplement passer le paramètre data avec ta requête.

Important ! Les requêtes GET ne prennent pas en charge les formulaires car elles ne contiennent pas de corps de requête. Toutes leurs données sont transmises uniquement dans l'URL.

Envoi de données dans une requête GET

Dans une requête GET, les données sont transmises via les paramètres de l'URL. Voici un exemple :


import requests

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)  # Affiche l'URL avec les paramètres ajoutés
    

Envoi de données de formulaire

Nous utiliserons une requête POST pour envoyer des données au serveur.

Exemple :


import requests

data = {
    'username': 'example',
    'password': 'password'
}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())
        

Envoi de fichiers

Si tu veux envoyer des données binaires sur Internet, par exemple, uploader une image, tu dois passer ton fichier ou tes fichiers dans la requête à l'aide du paramètre files.

Exemple :


import requests

files = {'file': open('example.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

Simple comme bonjour. Si tu veux envoyer plusieurs fichiers, tu les listes sous n'importe quels noms dans la variable files.

Important ! N'oublie pas de fermer le fichier après l'avoir envoyé pour éviter les fuites de ressources. Il est préférable d'utiliser la construction with, qui fermera automatiquement le fichier après la fin de l'opération :


import requests

with open('example.txt', 'rb') as f:
    files = {'file': f}
    response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

4.4 Connexion et autorisation

L'API (Application Programming Interface) est un ensemble de règles et de protocoles qui permettent à différents programmes de communiquer entre eux. De nombreux sites et services permettent d'envoyer des requêtes et de travailler avec leur API seulement après s'être connecté.

Après une connexion réussie, tu obtiens un objet spécial – une session (session), qui contient un numéro unique de ta "session autorisée avec le serveur". Pour les requêtes ultérieures, tu devras utiliser cet objet.

Authentification

Pour te connecter au serveur, tu dois passer par l'authentification (processus de connexion), pour laquelle tu dois transmettre les informations d'identification avec la requête.


import requests
from requests.auth import HTTPBasicAuth
        
response = requests.get('https://httpbin.org/basic-auth/user/pass', \ 
                        auth=HTTPBasicAuth('user', 'pass'))
print(response.status_code)
        
    

C'est ainsi que se déroule le processus d'autorisation, mais il est généralement utilisé avec une session.

Utilisation des sessions

Les sessions permettent de conserver des paramètres entre les requêtes, tels que les cookies ou les informations d'autorisation de l'utilisateur.


import requests

payload = {
    'username': 'your_username',
    'password': 'your_password'
}
            
# Création de la session
session = requests.Session()
            
# Connexion au site
login_response = session.post('https://example.com/login', data = payload)
            
# Poursuite du travail avec la session de l'utilisateur connecté
data_response = session.get('https://example.com/api/data')
print(data_response.json())
        
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION