Découvrez comment utiliser cURL en Python
Andrei Ogiolan le 12 décembre 2022
Qu'est-ce que cURL ?
Afin d'atteindre le but de cet article, qui est d'apprendre à utiliser cURL en Python, nous devons d'abord présenter cURL. Client URL(cURL) est, en bref, une ligne de commande facile à utiliser conçue pour les développeurs afin d'obtenir des données à partir d'un serveur.
Comment utiliser cURL ?
Comme je l'ai déjà mentionné plus haut, l'utilisation de cURL est assez simple et permet d'extraire des informations en une seule ligne de commande. Vous devez tout d'abord ouvrir un terminal et taper curl suivi d'un lien vers un site web, par exemple :
$ curl 'https://www.webscrapingapi.com/'
Félicitations, vous avez effectué votre première requête à l'aide de cURL. Cette simple commande demande des informations au serveur, comme le fait un navigateur traditionnel, et renvoie le code HTML de la page. Tous les sites web ne renvoient pas forcément du HTML, il existe des points d'accès qui renvoient des données sous forme d'objet JSON. Prenons l'exemple suivant :
$ curl 'https://jsonplaceholder.typicode.com/todos/1'
Tapez cette commande dans votre terminal et vous devriez obtenir cette réponse :
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
La plupart des API vous renvoient du HTML ou du JSON lorsque vous exécutez des commandes cURL. Mais ce n'est pas tout ce que cURL peut faire pour nous. En réalité, il s'agit d'un outil très sophistiqué. Si vous souhaitez en savoir plus sur cURL, je vous recommande vivement de consulter la documentation de cURL pour mieux comprendre ses paramètres. Vous pouvez également exécuter la commande suivante :
$ curl --help
Ceci vous montrera quelques options que vous pouvez définir pour cURL :
Usage: curl [options...] <url>
-d, --data <data> HTTP POST data
-f, --fail Fail silently (no output at all) on HTTP errors
-h, --help <category> Get help for commands
-i, --include Include protocol response headers in the output
-o, --output <file> Write to file instead of stdout
-O, --remote-name Write output to a file named as the remote file
-s, --silent Silent mode
-T, --upload-file <file> Transfer local FILE to destination
-u, --user <user:password> Server user and password
-A, --user-agent <name> Send User-Agent <name> to server
-v, --verbose Make the operation more talkative
-V, --version Show version number and quit
This is not the full help, this menu is stripped into categories.
Use "--help category" to get an overview of all categories.
For all options use the manual or "--help all".
Comme vous pouvez le constater, ce ne sont même pas toutes les options que vous pouvez définir pour cURL, il s'agit d'un menu divisé en catégories. Vous avez probablement deviné que pour obtenir toutes les options, vous devez exécuter :
curl --help all
Comment utiliser cURL en Python ?
Pour cette étape, il y a deux pré-requis. La première est assez évidente, vous devez installer Python sur votre machine. Vous pouvez le faire en vous rendant sur le site officiel de Python et en installant la bonne version pour votre système d'exploitation. Assurez-vous de choisir une nouvelle version, car les plus anciennes n'incluront probablement pas pip, qui est nécessaire pour la plupart des paquets que nous voudrons utiliser. Exécutez ensuite la commande suivante :
$ pip --version
Si l'installation est réussie, vous devriez obtenir la version de Pip que vous avez installée.
Dans le cas contraire, vous obtiendrez probablement ce message :
Le mot "pip" n'est pas considéré comme une commande externe ou interne. Un fichier batch est un programme à utiliser.
Il est très important que pip soit installé pour pouvoir continuer, car vous en aurez besoin pour installer des paquets.
La deuxième condition préalable est que vous soyez familier avec la syntaxe de Python ou que vous ayez au moins une expérience de niveau débutant avec un autre langage de programmation.
Pourquoi utiliser cURL en Python ?
Vous vous demandez probablement s'il n'est pas suffisant d'utiliser cURL à partir de la ligne de commande, car il suffit d'une ligne de commande pour que l'API nous renvoie les informations. Nous n'exécutons qu'une ligne de commande et l'API nous renvoie les informations.C'est vrai, mais dans le monde réel, nous voudrons traiter les données que nous recevons du serveur et c'est pourquoi nous avons besoin d'un langage de programmation.C'est à ce moment-là que Python entre en jeu.
Pourquoi utiliser Python ?
Python est un langage de programmation de haut niveau utilisé à de nombreuses fins. Sa syntaxe simple et sa simplicité font qu'il est très facile pour les débutants de le prendre en main. En outre, il dispose d'une énorme communauté prête à vous aider, donc si vous rencontrez des problèmes, n'hésitez pas à poser une question. Un endroit idéal pour poser une question est StackOverflow et quelqu'un vous répondra certainement.
Comment intégrer cURL dans Python
Comme précédemment, cURL en Python est également très simple. Rappelez-vous quand nous avons écrit une ligne de commande pour obtenir les données du serveur. La différence est que maintenant vous devez écrire 2 lignes de code pour ce simple appel, par exemple :
import os
os.system(f'curl "https://www.webscrapingapi.com/product/"')
Voyons maintenant le véritable avantage de l'utilisation d'un langage de programmation. Nous pouvons créer une fonction capable de prendre une URL personnalisée et d'exécuter la commande curl :
import os
def cURL(url):
return os.system(f'curl "{url}"')
cURL('https://www.webscrapingapi.com/blog/')
Vous pouvez remplacer https://www.webscrapingapi.com/blog/ par tout autre site web dont vous souhaitez récupérer les données. Félicitations, à ce stade, vous avez créé un script qui prend une url, exécute la commande cURL et affiche le résultat dans la console. Vous pouvez exécuter Python directement dans votre terminal, mais pour une meilleure expérience de programmation, je vous recommande vivement d'utiliser un environnement de développement intégré. Il y a de nombreux choix possibles, mais pour Python, je recommande PyCharm que vous pouvez télécharger ici.
Comme je l'ai déjà mentionné ci-dessus, cURL n'est pas limité à cela. il peut faire un grand nombre de choses en plus d'envoyer des requêtes GET. il peut aussi télécharger des fichiers ou envoyer des requêtes POST, PUT ou DELETE. Il peut également télécharger des fichiers ou envoyer des requêtes POST, PUT ou DELETE. Voici un exemple de fonction Python qui envoie une requête POST à https://httpbin.org/post :
import os
def cURL(method,url,data):
return os.system(f'curl -X "{method}" --url "{url}" --data {data} ')
data = '{"foo":"bar"}'
cURL('POST', 'https://httpbin.org/post', data)
Comme vous l'avez probablement vu, la commande est légèrement différente lors de l'envoi d'une requête POST. Dans la requête précédente, vous n'aviez pas besoin d'utiliser les paramètres -X et -data car la méthode par défaut de cURL est GET. Après avoir exécuté cette commande, vous devriez recevoir de l'API httpbin une réponse contenant votre demande, votre adresse IP, les paramètres et le corps que vous avez soumis, ce qui ressemblerait à quelque chose comme ça.
{
"args": {},
"data": "",
"files": {},
"form": {
"{foo:bar}": ""
},
"headers": {
"Accept": "*/*",
"Content-Length": "9",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/X.XX.X",
"X-Amzn-Trace-Id": "Root=X-XXXXX-XXXXXX"
},
"json": null,
"origin": "0.0.0.0",
"url": "https://httpbin.org/post"
}
À ce stade, vous avez déjà construit un outil simple qui peut envoyer des requêtes GET, POST, PUT, PATCH, DELETE etc. pour récupérer des données à partir d'une API. Nous pouvons maintenant définir l'URL, la méthode et le corps directement à partir de notre script Python au lieu de les saisir manuellement. Cependant, il s'agit là d'un avantage mineur de l'utilisation de cURL en Python. Le principal avantage est que nous pouvons maintenant traiter les données comme nous le souhaitons, même si l'API ne nous donne pas la possibilité de les obtenir comme nous le souhaitons. Par exemple, disons qu'on nous donne une liste de tous les utilisateurs, mais que nous voulons les diviser en deux groupes et obtenir les utilisateurs du deuxième groupe.
Nous pouvons le faire grâce à Python en stockant la réponse dans une variable appelée users que nous pouvons convertir en un tableau d'objets JSON en utilisant la méthode json.loads() pour laquelle vous pouvez trouver plus d'informations ici. Ensuite, nous pouvons itérer à travers le tableau d'utilisateurs et afficher seulement les utilisateurs dans la deuxième moitié de la liste ou avec leur numéro d'identification plus grand que le milieu de la liste. Pour une meilleure compréhension, voici comment cela se traduit en code :
import subprocess
import json
def cURL(url) :
return subprocess.check_output(['curl',url])
users = json.loads(cURL('https://jsonplaceholder.typicode.com/users'))
for user in users :
if(user['id'] > len(users) / 2) : print(user)
Vous avez probablement remarqué qu'au lieu de os, nous utilisons maintenant les bibliothèques subprocess et json. Nous utilisons la bibliothèque subprocess parce que nous voulons pouvoir sauvegarder la sortie de la commande, contrairement au module os qui ne fait qu'exécuter la commande sans la stocker. Le code est une simple requête à une API qui nous renvoie une liste d'utilisateurs sous la forme d'objets JSON. La sortie doit être :
{'id': 6, 'name': 'Mrs. Dennis Schulist', 'username': 'Leopoldo_Corkery', 'email': 'Karley_Dach@jasper.info', 'address': {'street': 'Norberto Crossing', 'suite': 'Apt. 950', 'city': 'South Christy', 'zipcode': '23505-1337', 'geo': {'lat': '-71.4197', 'lng': '71.7478'}}, 'phone': '1-477-935-8478 x6430', 'website': 'ola.org', 'company': {'name': 'Considine-Lockman', 'catchPhrase': 'Synchronised bottom-line interface', 'bs': 'e-enable innovative applications'}}
{'id': 7, 'name': 'Kurtis Weissnat', 'username': 'Elwyn.Skiles', 'email': 'Telly.Hoeger@billy.biz', 'address': {'street': 'Rex Trail', 'suite': 'Suite 280', 'city': 'Howemouth', 'zipcode': '58804-1099', 'geo': {'lat': '24.8918', 'lng': '21.8984'}}, 'phone': '210.067.6132', 'website': 'elvis.io', 'company': {'name': 'Johns Group', 'catchPhrase': 'Configurable multimedia task-force', 'bs': 'generate enterprise e-tailers'}}
{'id': 8, 'name': 'Nicholas Runolfsdottir V', 'username': 'Maxime_Nienow', 'email': 'Sherwood@rosamond.me', 'address': {'street': 'Ellsworth Summit', 'suite': 'Suite 729', 'city': 'Aliyaview', 'zipcode': '45169', 'geo': {'lat': '-14.3990', 'lng': '-120.7677'}}, 'phone': '586.493.6943 x140', 'website': 'jacynthe.com', 'company': {'name': 'Abernathy Group', 'catchPhrase': 'Implemented secondary concept', 'bs': 'e-enable extensible e-tailers'}}
{'id': 9, 'name': 'Glenna Reichert', 'username': 'Delphine', 'email': 'Chaim_McDermott@dana.io', 'address': {'street': 'Dayna Park', 'suite': 'Suite 449', 'city': 'Bartholomebury', 'zipcode': '76495-3109', 'geo': {'lat': '24.6463', 'lng': '-168.8889'}}, 'phone': '(775)976-6794 x41206', 'website': 'conrad.com', 'company': {'name': 'Yost and Sons', 'catchPhrase': 'Switchable contextually-based project', 'bs': 'aggregate real-time technologies'}}
{'id': 10, 'name': 'Clementina DuBuque', 'username': 'Moriah.Stanton', 'email': 'Rey.Padberg@karina.biz', 'address': {'street': 'Kattie Turnpike', 'suite': 'Suite 198', 'city': 'Lebsackbury', 'zipcode': '31428-2261', 'geo': {'lat': '-38.2386', 'lng': '57.2232'}}, 'phone': '024-648-3804', 'website': 'ambrose.net', 'company': {'name': 'Hoeger LLC', 'catchPhrase': 'Centralized empowering task-force', 'bs': 'target end-to-end models'}}
Ce n'est qu'une des utilisations de cURL en Python. Nous ne dépendons plus de l'API pour renvoyer les données comme nous le souhaitons, nous pouvons les traiter de différentes manières, par exemple en affichant si une personne fait partie d'une liste de réponses en fonction de son nom, de son adresse électronique, de son numéro de téléphone ou de toute autre propriété unique d'une personne.
Par exemple, disons que nous aimerions vérifier si un nom spécifique existe ou non dans une liste. Pour cela, nous pouvons créer une fonction qui peut prendre la réponse que nous avons convertie en un tableau JSON prêt à être analysé par Python.
import subprocess
import json
def cURL(url):
return subprocess.check_output(['curl',url])
users = json.loads(cURL('https://jsonplaceholder.typicode.com/users'))
def check_if_user_exists(users,name):
for user in users:
if(user['name'] == name): print(f'An user called {name} exists in the list and has the id of {user["id"]}')
check_if_user_exists(users,'Clementina DuBuque')
Ce bloc de code nous renvoie alors ce résultat :
Un utilisateur appelé Clementina DuBuque existe dans la liste et a pour identifiant 10.
Félicitations. Vous avez créé un script qui récupère des données d'un serveur, les stocke et les analyse ensuite. Les avantages de l'utilisation de Python ne s'arrêtent pas là, Python possède même une interface spéciale conçue pour utiliser cURL, appelée PycURL , dont nous allons parler maintenant.
Qu'est-ce que PycURL ?
Comme nous l'avons déjà mentionné, PycURL est, en bref, un outil Python qui nous aide à utiliser cURL plus naturellement. Un grand avantage est que PycURL est fortement optimisé et supporte la concurrence, ce qui signifie qu'il est très rapide (plus rapide que la populaire bibliothèque de requêtes Python). D'un autre côté, l'utilisation de PycURL n'est pas aussi facile que ce que nous avons vu précédemment, car il s'agit d'un outil destiné à un développeur avancé. Cependant, vous ne devriez pas vous sentir intimidé par cela car, à la fin, vous obtiendrez une compréhension plus profonde des réseaux et vous deviendrez plus à l'aise avec Python.
Comment l'installer ?
Comme tout autre paquetage, vous pouvez l'installer avec pip :
pip install pycurl
Vous devriez également installer certifi cette fois-ci pour des raisons de sécurité lors de l'utilisation de pycurl. Certifi est un outil qui valide les certificats SSL tout en vérifiant l'identité de l'hôte TLS. Pour en savoir plus sur certifi, je vous suggère fortement de consulter leur documentation. Vous pouvez l'installer de la même manière :
pip install certifi
Vous pouvez maintenant tester la réussite de l'installation en exécutant le script suivant :
import certifi
print(certifi.where())
Le résultat devrait être l'emplacement où le paquet a été installé :
/usr/local/lib/python3.10/site-packages/certifi/cacert.pem
Comment utiliser pycURL ?
La différence par rapport à ce que nous faisions auparavant est que nous n'écrivons plus que du code sans exécuter de commandes directement. En bref, nous créons une instance de la classe pycurl.Curl(), nous récupérons les données et les écrivons dans un tampon que nous allons ensuite décoder afin de pouvoir lire les données que vous recevez :
import pycurl
import certifi
from io import BytesIO
buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://docs.webscrapingapi.com/')
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())
c.perform()
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1'))
Vous l'avez deviné, tout comme dans nos exemples précédents, ceci récupère le contenu HTML de la page web de WebScrapingAPI et l'imprime dans la ligne de commande.
Une requête POST n'est pas très différente, si ce n'est que vous devez indiquer à votre instance de la classe pycurl.Curl() que vous allez utiliser une méthode post, définir votre corps et vos en-têtes, si c'est le cas :
import pycurl
import certifi
import json
from io import BytesIO
buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://httpbin.org/post')
c.setopt(pycurl.HTTPHEADER, [ 'Content-Type: application/json' , 'Accept: application/json'])
data = json.dumps({"foo": "bar"})
c.setopt(pycurl.POST, 1)
c.setopt(pycurl.POSTFIELDS, data)
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())
c.perform()
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1'))
Et nous devrions recevoir en retour, comme précédemment, une réponse contenant votre requête, votre adresse IP, vos paramètres et votre corps :
{
"args": {},
"data": "",
"files": {},
"form": {
"{foo:bar}": ""
},
"headers": {
"Accept": "*/*",
"Content-Length": "9",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/X.XX.X",
"X-Amzn-Trace-Id": "Root=X-XXXXX-XXXXXX"
},
"json": null,
"origin": "0.0.0.0",
"url": "https://httpbin.org/post"
}
Comme je l'ai déjà mentionné, il n'y a que des choses basiques que pycURL peut faire pour nous. C'est un outil très complexe et sophistiqué sur lequel nous pourrions écrire de nombreux articles. Si vous voulez explorer plus de choses que vous pouvez faire avec lui, je vous encourage fortement à consulter leur documentation.
Résumé
En conclusion, l'utilisation de cURL en Python est très efficace et permet de gagner beaucoup de temps et, en plus, peut être le point de départ de projets intéressants dans des domaines tels que l'analyse de données ou le web scraping. J'espère que vous avez trouvé cette ressource utile pour apprendre à utiliser cURL en Python et que vous allez vous amuser avec et construire quelques scripts.
Nouvelles et mises à jour
Restez au courant des derniers guides et nouvelles sur le web scraping en vous inscrivant à notre lettre d'information.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Articles connexes

Apprenez à récupérer des sites web dynamiques en JavaScript à l'aide de Scrapy et de Splash. De l'installation à l'écriture d'un spider, en passant par la gestion de la pagination et des réponses Splash, ce guide complet propose des instructions pas à pas pour les débutants comme pour les experts.


Explorez le pouvoir de transformation du web scraping dans le secteur financier. Des données sur les produits à l'analyse des sentiments, ce guide donne un aperçu des différents types de données web disponibles pour les décisions d'investissement.


Commencez avec WebScrapingAPI, la solution ultime de web scraping ! Collectez des données en temps réel, contournez les systèmes anti-bots et bénéficiez d'une assistance professionnelle.
