Gérer les requêtes HTTP avec Requests

Requests est une bibliothèque Python simple et puissante pour envoyer des requêtes HTTP. Elle permet d’interagir facilement avec des API ou de récupérer des données depuis des sites web. Grâce à sa syntaxe intuitive, Requests facilite l’envoi de requêtes HTTP de différents types (GET, POST, PUT, DELETE, etc.) et la gestion des réponses. Elle permet également de gérer les paramètres de requêtes, les en-têtes, l’authentification, et de télécharger des fichiers ou des données en JSON. Cette bibliothèque est largement utilisée pour effectuer des appels API, scraper des pages web statiques ou interagir avec des services web.

Fonctions :

  • requests.get()

    La fonction requests.get() envoie une requête HTTP GET, qui est utilisée pour récupérer des ressources depuis un serveur, comme une page web ou des données d'une API.

    Importation :

    import requests

    Attributs :

    Paramètre Description
    url URL à laquelle la requête GET est envoyée.
    params Paramètres facultatifs sous forme de dictionnaire (optionnel).
    timeout Durée maximale d'attente avant d'abandonner la requête (optionnel).
    headers En-têtes HTTP personnalisés (optionnel).
    status_code Code de statut HTTP renvoyé par le serveur.

    Exemple de code :

    # Faire une requête GET
    url = 'https://www.example.com'
    response = requests.get(url)
    
    # Vérifier si la requête a réussi
    if response.status_code == 200:
        print("Requête réussie !")
        print(response.text)  # Affiche le contenu de la page
    else:
        print(f"Erreur {response.status_code}")
  • requests.post()

    La fonction requests.post() envoie une requête HTTP POST, souvent utilisée pour envoyer des données au serveur, comme des informations de formulaire ou des données JSON.

    Importation :

    import requests

    Attributs :

    Paramètre Description
    url URL à laquelle la requête POST est envoyée.
    data Données à envoyer dans le corps de la requête (sous forme de dictionnaire).
    json Données à envoyer au format JSON (optionnel).
    timeout Durée d'attente en secondes avant l'expiration (optionnel).

    Exemple de code :

    # Faire une requête POST
    url = 'https://www.example.com/login'
    data = {'username': 'user', 'password': 'pass'}
    response = requests.post(url, data=data)
    
    # Vérifier la réponse
    if response.status_code == 200:
        print("Connexion réussie !")
    else:
        print(f"Erreur {response.status_code}")
  • requests.head()

    La fonction requests.head() envoie une requête HTTP HEAD, qui est similaire à GET, mais elle ne récupère que les en-têtes de la réponse et pas le corps.

    Importation :

    import requests

    Attributs :

    Paramètre Description
    url URL de la page dont on souhaite récupérer les en-têtes.
    headers Dictionnaire des en-têtes de la réponse (par exemple, type de contenu, date, etc.).

    Exemple de code :

    # Faire une requête HEAD pour obtenir seulement les en-têtes
    url = 'https://www.example.com'
    response = requests.head(url)
    
    # Afficher les en-têtes de la réponse
    print(response.headers)
  • requests.put()

    La fonction requests.put() envoie une requête HTTP PUT, souvent utilisée pour mettre à jour une ressource existante sur un serveur.

    Importation :

    import requests

    Attributs :

    Paramètre Description
    url URL de l'API ou de la ressource à mettre à jour.
    data Données à envoyer dans le corps de la requête (sous forme de dictionnaire).

    Exemple de code :

    # Faire une requête PUT
    url = 'https://api.example.com/update'
    data = {'id': 123, 'status': 'active'}
    response = requests.put(url, data=data)
    
    # Vérifier la réponse
    if response.status_code == 200:
        print("Données mises à jour avec succès !")
    else:
        print(f"Erreur {response.status_code}")
  • requests.delete()

    La fonction requests.delete() envoie une requête HTTP DELETE pour supprimer une ressource existante sur un serveur.

    Importation :

    import requests

    Attributs :

    Paramètre Description
    url URL de la ressource à supprimer.

    Exemple de code :

    # Faire une requête DELETE
    url = 'https://api.example.com/delete/123'
    response = requests.delete(url)
    
    # Vérifier la réponse
    if response.status_code == 200:
        print("Ressource supprimée avec succès !")
    else:
        print(f"Erreur {response.status_code}")
  • requests.Session()

    Utiliser une session (requests.Session) permet de maintenir certaines informations de la requête, comme les cookies et les en-têtes, entre les requêtes. Cela peut simuler un comportement plus naturel en gardant une "session" active, ce qui peut éviter les blocages.

    Exemple de code :

    import requests
    
    # Créer une session
    session = requests.Session()
    
    # Ajouter un user-agent personnalisé pour la session
    session.headers.update({
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    })
    
    # Faire une requête GET avec la session
    url = 'https://www.example.com'
    response = session.get(url)
    
    # Vérifier la réponse
    if response.status_code == 200:
        print("Requête réussie avec session !")
    else:
        print(f"Erreur {response.status_code}")

    Explication du code :

    La Session conserve l'état des connexions, y compris les cookies et les en-têtes. Cela permet d'effectuer plusieurs requêtes sans avoir à redéfinir manuellement les headers et cookies à chaque fois. Le code montre comment configurer un user-agent personnalisé pour la session et comment envoyer une requête GET en utilisant cette session.
  • Gestion des cookies

    Les cookies peuvent être utilisés pour maintenir l'état entre les requêtes. Si un site exige une forme d'authentification ou de suivi, les cookies permettent de simuler une session valide et d'éviter les blocages.

    Exemple de code :

    import requests
    
    # Créer une session
    session = requests.Session()
    
    # Faire une première requête pour récupérer les cookies
    url = 'https://www.example.com/login'
    response = session.get(url)
    
    # Utiliser les cookies récupérés pour une autre requête
    data = {'username': 'user', 'password': 'pass'}
    response = session.post(url, data=data)
    
    # Vérifier la réponse
    if response.status_code == 200:
        print("Connexion réussie avec cookies !")
    else:
        print(f"Erreur {response.status_code}")

    Explication du code :

    La session est utilisée pour maintenir les cookies entre les requêtes. Après une première requête pour récupérer les cookies (par exemple, une page de connexion), nous utilisons ces cookies pour effectuer une autre requête (comme un POST pour se connecter).
  • Simulation de délais entre les requêtes

    Pour éviter que votre activité ne soit perçue comme suspecte (scraping trop rapide), vous pouvez simuler des délais (comme un intervalle entre les requêtes).

    Exemple de code :

    import requests
    import time
    
    # Faire une requête avec délai simulé
    url = 'https://www.example.com'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
    
    # Faire une requête GET avec un délai entre les requêtes
    response = requests.get(url, headers=headers)
    time.sleep(3)  # Délai de 3 secondes entre les requêtes
    
    # Vérifier la réponse
    if response.status_code == 200:
        print("Requête réussie avec délai !")
    else:
        print(f"Erreur {response.status_code}")

    Explication du code :

    Ici, après chaque requête, nous utilisons la fonction time.sleep(3) pour ajouter un délai de 3 secondes avant la prochaine requête. Cela imite mieux le comportement humain, qui prend généralement du temps entre les interactions, et réduit le risque d'être bloqué.
  • Vérification de la réponse HTTP pour détecter les blocages

    Il est important de vérifier si une requête a échoué en raison de restrictions côté serveur. Vous pouvez analyser les codes d'état HTTP comme 403 (Accès interdit) ou 503 (Service indisponible).

    Exemple de code :

    import requests
    
    # Faire une requête GET
    url = 'https://www.example.com'
    response = requests.get(url)
    
    # Vérifier les codes d'état HTTP
    if response.status_code == 200:
        print("Requête réussie !")
    elif response.status_code == 403:
        print("Accès interdit : Le site a peut-être détecté un bot.")
    elif response.status_code == 503:
        print("Service indisponible : Réessayez plus tard.")
    else:
        print(f"Erreur {response.status_code}")

    Explication du code :

    Le code vérifie les codes d'état HTTP retournés par la requête. Un code 403 indique que l'accès est interdit, souvent à cause de la détection d'un bot. Un code 503 signifie que le service est temporairement indisponible, et un code 200 signifie que la requête a réussi.