Curl est un utilitaire de ligne de commande utilisé comme client HTTP. Il est populaire pour effectuer des requêtes HTTP à partir de la ligne de commande. cURL peut être utilisé pour écrire des scripts pour le web scraping, vérifier la santé d'un site et télécharger des fichiers à partir de la ligne de commande.
Il est incroyablement simple et peut être utilisé dans de nombreux langages de programmation. Cet article explique ce qu'est cURL et comment l'utiliser avec Python.
Qu'est-ce que cURL ?
Selon le site web, cURL signifie "client URL". Il s'agit d'un outil de ligne de commande et d'une bibliothèque permettant de transférer des données à l'aide de différents protocoles réseau de couche d'application tels que HTTP, HTTPS, FTP et IMAP.
Il est incroyablement populaire et utilisé dans plus de 10 milliards d'installations sur des appareils tels que des radios, des téléviseurs, des routeurs, des imprimantes et des ordinateurs. cURL est entièrement gratuit et open-source. Son code source est disponible sur GitHub.
cas d'utilisation de cURL
cURL est très utile et polyvalent. Vous trouverez ci-dessous les cas d'utilisation les plus courants de cURL. La liste n'est pas exhaustive, mais vous trouverez ci-dessous quelques-uns des cas les plus populaires :
- Test des API: Il permet de vérifier si l'API fonctionne correctement, en renvoyant les bonnes données pour une requête donnée. En outre, il peut également être utilisé pour vérifier la vitesse de l'API, c'est-à-dire la rapidité avec laquelle elle répond aux demandes. Vous pouvez écrire un script pour vérifier périodiquement l'état de l'API et envoyer des alertes en cas de problème.
- Récupération de données sur le Web: Il permet également d'extraire automatiquement des données de sites web. cURL peut être utilisé avec de nombreux langages de programmation et en tant que commande Bash. Avec cURL, vous pouvez extraire des données de sites web de manière dynamique. À partir de la réponse HTML, vous pouvez analyser et extraire les données dont vous avez besoin. Si vous êtes intéressé par le web scraping, vous pouvez consulter l'API Geekflare Web Scraping qui facilite le scrape de données.
- Téléchargement de données : Avec cURL, vous pouvez enregistrer la réponse des requêtes dans un fichier. Ces réponses peuvent être des données provenant de requêtes API ou des fichiers provenant d'un serveur. En fait, en écrivant la réponse dans un fichier, vous avez téléchargé le fichier. Comme cURL est un outil de ligne de commande, vous pouvez automatiser ce processus pour télécharger un grand nombre de fichiers à la fois.
Comment utiliser cURL en Python (PycURL)
Installation de PycURL
Pour utiliser cURL en Python, nous utilisons la bibliothèque PycURL. PycURL est une interface Python pour la bibliothèque cURL. Elle crée une enveloppe fine au-dessus de la bibliothèque cURL déjà rapide. PycURL est donc plus rapide que d'autres bibliothèques permettant d'effectuer des requêtes, telles que urllib et requests. Pour utiliser PycURL, vous devez d'abord l'installer. Vous trouverez des instructions détaillées ici, mais une façon simple de l'installer est d'utiliser pip.
pip install PycURL
Sur Ubuntu 22.04, j'ai dû installer des outils supplémentaires avant d'installer PycURL. Utilisez cette commande avant d'essayer d'installer PycURL avec pip :
sudo apt install libcurl4-openssl-dev libssl-dev
Faire une simple requête GET
Pour effectuer une requête, commencez par créer un script Python dans lequel vous écrivez le code. Ouvrez le fichier avec un éditeur de texte. Je vais utiliser Vim, mais vous pouvez utiliser celui de votre choix. Pour ouvrir le fichier avec Vim, utilisez la commande ci-dessous :
vim pycurl.py
Ici, pycurl.py
est le nom du fichier dans lequel je vais écrire mon code, mais vous pouvez donner n'importe quel nom à votre fichier.
Ensuite, nous importons la classe cURL du module PycURL
from pycurl import Curl
Après avoir importé PycURL, nous importons BytesIO de io. Nous en aurons besoin pour créer un tampon afin d'écrire la réponse de PycURL.
from io import BytesIO
Ensuite, nous créons une nouvelle instance Curl.
c = Curl()
Ensuite, nous instancions BytesIO pour créer un nouveau tampon. PycURL n'a pas de mécanisme de stockage intégré pour stocker les réponses. Nous devons donc créer un tampon et lui indiquer où écrire les données.
buffer = BytesIO()
Une fois le tampon créé, nous pouvons définir des options sur notre objet client. Dans ce cas, nous voulons définir deux options : la première est l'URL que nous demandons. La seconde est l'endroit où nous voulons écrire le corps de la réponse. Voici le code pour le faire :
c.setopt(c.URL, 'http://pycurl.io/')
c.setopt(c.WRITEDATA, buffer)
Une fois que nous avons fait cela, nous pouvons demander en appelant la méthode perform de l'objet client et ensuite fermer la demande en appelant la méthode close.
c.perform()
c.close()
Pour obtenir la réponse, nous appelons la méthode getvalue()
de l'objet buffer et nous la décodons. Nous pouvons ensuite l'imprimer sur la console.
body = buffer.getvalue()
print(body.decode('iso-8859-1'))
Votre fichier devrait ressembler à ceci :
from pycurl import Curl
from io import BytesIO
# Créer une instance pycUrl
c = Curl()
buffer = BytesIO()
c.setopt(c.URL, 'http://pycurl.io/')
c.setopt(c.WRITEDATA, buffer)
# Effectuer la requête
c.perform()
# Fermer la connexion
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1'))
Après avoir exécuté le script, vous devriez obtenir la sortie suivante :

Effectuer une requête POST
Pour effectuer une requête POST, vous devez définir les options POSTFIELDS
de l'objet client cURL. Par exemple, voici une requête POST à l'API JSON Placeholder.
from io import BytesIO
from json import dumps
from pycurl import Curl
# Créer une instance pycUrl
c = Curl()
buffer = BytesIO()
# Créer un dictionnaire de données
data = {
'userId' : 1,
'title' : 'Lorem Ipsum',
'body' : 'Dolor sit amet'
}
# Encoder les données en json
encoded_data = dumps(data)
# Définir les options de la requête
c.setopt(c.URL, 'https://jsonplaceholder.typicode.com/posts')
c.setopt(c.HTTPHEADER, ['Accept : application/json', 'Content-Type : application/json'])
c.setopt(c.POSTFIELDS, encoded_data)
c.setopt(c.WRITEDATA, buffer)
# Effectuer la requête
c.perform()
# Fermer la connexion
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1'))
Dans le code ci-dessus, j'ai créé un objet dictionnaire avec les données que j'enverrai dans le cadre de la requête. Ensuite, j'ai encodé les données en JSON et je les ai envoyées en tant que charge utile à la requête en définissant l'option POSTFIELDS pour les données encodées. J'ai également spécifié des en-têtes pour préciser le type de contenu de la requête et le type de données de la réponse acceptée. Lorsque vous exécutez le code, vous devriez obtenir une réponse comme celle-ci.

Écriture des réponses dans des fichiers
Vous pouvez également transmettre un tampon de fichier à l'option cURL WRITEDATA. Les données de la réponse seront alors écrites dans le fichier. L'exemple suivant illustre ce concept :
from pycurl import Curl
file_name = 'output.json'
# Ouverture du fichier en mode écriture
with open(file_name, 'wb') as f :
# Création d'une instance Curl
c = Curl()
# Définition des options de requête
c.setopt(c.URL, 'https://jsonplaceholder.typicode.com/users/1')
c.setopt(c.HTTPHEADER, ['Accept : application/json'])
c.setopt(c.WRITEDATA, f)
# Effectuer la requête
c.perform()
# Fermer la connexion
c.close()
print(f'Writted output to {file_name}')
Alternatives à PycURL
PycURL ne fournit qu'une fine couche sur la bibliothèque cURL. Cela le rend hautement personnalisable car vous avez plus de contrôle sur les fonctionnalités de bas niveau.
Cependant, il est plus difficile à utiliser et s'adresse donc davantage aux développeurs avancés. Il arrive souvent que vous souhaitiez une alternative plus simple à PycURL. Dans cette section, nous allons discuter des alternatives.
#1. Autres bibliothèques
Outre PycURL, Python possède d'autres bibliothèques qui peuvent être utilisées pour effectuer des requêtes. Il s'agit notamment de la bibliothèque requests et de la bibliothèque urllib. Toutes deux sont des alternatives populaires et plus faciles à utiliser que pycURL.
#2. Autres langages
cURL dispose d'interfaces implémentées dans d'autres langages. Un site web populaire pour convertir les sites web cURL est Convertisseur de boucles. Avec le convertisseur cURL, vous écrivez une commande cURL pour la requête que vous voulez faire, et il convertit automatiquement votre commande dans le langage de programmation de votre choix. Vous pouvez également appeler la commande cURL directement dans votre terminal ou écrire un script Bash.
Le mot de la fin
Dans cet article, j'ai présenté cURL et expliqué comment l'utiliser en Python à l'aide du module PycURL. Nous avons également abordé les alternatives à PycURL, telles que le module requests et l'utilisation de langages différents pour vos programmes.
Ensuite, vous pourrez découvrir l'utilisation des commandes cURL à l'aide d'exemples en temps réel.