CodeGym /Cours Java /Python SELF FR /Utilisation de HttpClient

Utilisation de HttpClient

Python SELF FR
Niveau 23 , Leçon 4
Disponible

5.1 Introduction à HttpClient

En Python, comme dans de nombreux langages de programmation, il existe un HttpClient standard. En Python, il s'appelle http.client et permet d'effectuer des requêtes HTTP de bas niveau et de travailler avec les réponses HTTP. Il permet de créer des connexions aux serveurs HTTP et d'interagir avec eux.

Un module de bas niveau, comme http.client, offre un contrôle plus détaillé sur les opérations HTTP, mais nécessite plus de code pour effectuer des tâches. Contrairement à lui, les modules de haut niveau, comme requests, offrent une interface plus simple, cachant de nombreux détails d'implémentation.

Fonctionnalités principales de http.client

Le module http.client offre les fonctionnalités principales suivantes :

  • Création de connexions HTTP.
  • Envoi de requêtes HTTP.
  • Lecture des réponses HTTP.
  • Traitement des en-têtes et du corps des requêtes et réponses.

Contrairement au module requests, le module http.client est plus bas niveau et accorde beaucoup d'attention aux nuances du fonctionnement des requêtes http.

Principales classes et méthodes de http.client

Classe/Méthode Description
HTTPConnection Création d'une connexion HTTP.
HTTPSConnection Création d'une connexion HTTPS.
request(method, url, ...) Envoi d'une requête HTTP.
getresponse() Obtenir la réponse à la requête.
response.status Code d'état de la réponse.
response.reason Description textuelle de l'état de la réponse.
response.read() Lecture des données de la réponse.
response.getheaders() Obtenir tous les en-têtes de la réponse.
response.getheader(name) Obtenir la valeur d'un en-tête spécifique.

Nous allons examiner certains d'entre eux plus en détail ci-dessous.

5.2 Exécution d'une requête GET

Pour effectuer des requêtes en utilisant la bibliothèque http.client, il faut suivre l'ordre des actions suivant :


Établir une connexion
Envoyer la requête
Recevoir la réponse
Fermer la connexion

Il est important de noter que fermer la connexion après utilisation est nécessaire pour libérer les ressources et éviter les fuites de mémoire. C'est particulièrement important lors du traitement d'une grande quantité de requêtes ou dans des applications de longue durée.

Exemple d'utilisation de HTTPConnection pour une requête HTTP classique :


import http.client

# Création d'une connexion HTTP
conn = http.client.HTTPConnection("example.com")
            
# Envoi de la requête GET
conn.request("GET", "/")
            
# Recevoir la réponse
response = conn.getresponse()
print(response.status, response.reason)
            
# Fermeture de la connexion
conn.close()
        

Exemple d'utilisation de HTTPSConnection :


import http.client

# Création de la connexion
conn = http.client.HTTPSConnection("jsonplaceholder.typicode.com")
            
# Envoi de la requête GET
conn.request("GET", "/posts/1")
            
# Recevoir la réponse
response = conn.getresponse()
print(response.status, response.reason)
            
# Lecture et décodage des données de la réponse
data = response.read().decode('utf-8')
print(data)
            
# Obtenir tous les en-têtes de la réponse
headers = response.getheaders()
for header in headers:
    print(f"{header[0]}: {header[1]}")
            
# Fermeture de la connexion
conn.close()
        

Un peu plus long qu'en utilisant requests, n'est-ce pas ?

5.3 Exécution d'une requête POST

Une requête POST avec http.client est réalisée de manière très similaire à une requête GET, sauf que tu dois emballer les données dans une chaîne json toi-même et indiquer manuellement le type de données transmises — ajouter un en-tête Content-Type.

Exemple :


import http.client
import json

# Envoi de la requête POST
conn.request("POST", "/posts", body=payload, headers=headers)
        

Pour le body tu dois passer un objet json, sérialisé en chaîne, et pour les headers — un dictionnaire contenant des informations sur le type de données.

Ils pourraient ressembler, par exemple, à ceci :


# Données à envoyer
payload = json.dumps({
    "title": "foo",
    "body": "bar",
    "userId": 1
})
            
# En-têtes – type de contenu transmis
headers = {
    'Content-Type': 'application/json'
}
        

Alors le code complet de la requête POST sera comme ceci :


import http.client
import json

# Données à envoyer
payload = json.dumps({
    "title": "foo",
    "body": "bar",
    "userId": 1
})
            
# En-têtes
headers = {
    'Content-Type': 'application/json'
}
            
# Création de la connexion
conn = http.client.HTTPSConnection("jsonplaceholder.typicode.com")
            
# Envoi de la requête POST
conn.request("POST", "/posts", body=payload, headers=headers)
            
# Recevoir la réponse
response = conn.getresponse()
print(response.status, response.reason)
            
# Lecture et décodage des données de la réponse
data = response.read().decode('utf-8')
print(data)
            
# Fermeture de la connexion
conn.close()
        

5.4 Gestion des erreurs lors de l'exécution des requêtes

Je pense qu'il serait également utile de donner un exemple de gestion des erreurs, car il diffère du comportement de requests. Dans le module http.client, une exception est levée automatiquement s'il y a eu des problèmes de connexion ou d'autres erreurs HTTP.

Exemple :


import http.client

try:
    # Création de la connexion
    conn = http.client.HTTPSConnection("jsonplaceholder.typicode.com")
            
    # Envoi de la requête GET
    conn.request("GET", "/posts/1")
            
    # Recevoir la réponse
    response = conn.getresponse()
    print(response.status, response.reason)
            
    # Lecture et décodage des données de la réponse
    data = response.read().decode('utf-8')
    print(data)
            
except http.client.HTTPException as e:
    print("Erreur HTTP s'est produite:", e)
except Exception as e:
    print("Une erreur s'est produite:", e)
finally:
    # Fermeture de la connexion
    conn.close()
        

Que dire ? L'utilisation du module requests est évidemment plus simple. Mais ! De nombreux modules et frameworks utilisent sous le capot le client http de bas niveau. Vous devez savoir comment l'utiliser, afin de configurer correctement leur fonctionnement.

1
Опрос
Sérialisation,  23 уровень,  4 лекция
недоступен
Sérialisation
Sérialisation
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION