cURL, abréviation de "Client for URLs", est un outil de ligne de commande pour transférer des données à l'aide de divers protocoles. Cet article vise à fournir les commandes largement utilisées et à servir de référence pratique.
Table des matières
- Télécharger un seul fichier
- Enregistrer la sortie cURL dans un fichier
- Masquer la barre de progression
- Récupérer plusieurs fichiers à la fois
- Suivez les en-têtes d'emplacement HTTP avec l'option -L
- Continuer/Reprendre un téléchargement précédent
- Utiliser un proxy avec ou sans authentification
- Interroger les en-têtes HTTP
- Télécharger des fichiers sur le serveur FTP
- Télécharger des fichiers à partir du serveur FTP
- Répertorier/Télécharger à l'aide de plages
- Plus d'informations à l'aide de l'option Verbose and Trace
- Envoyer des e-mails à l'aide du protocole SMTP
- Vérification de la prise en charge HTTP/2
- Simuler des méthodes HTTP
- Effectuer une requête POST avec des paramètres
- Conclusion
Vous pouvez invoquer curl
depuis votre terminal sans penser aux moyens de l'installer, car il est préinstallé sur la plupart des systèmes d'exploitation basés sur Linux.
Il existe une grande quantité de cas d'utilisation pour curl, tels que :
- Téléchargement FTP
- Prise en charge des proxys
- Connexions SSL
- Message HTTP
cURL prend également en charge l'utilisation de tous les protocoles suivants :DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP , SMTPS, TELNET et TFTP.
Télécharger un seul fichier
La commande suivante obtiendra le contenu de l'URL et l'affichera dans le STDOUT (c'est-à-dire sur votre terminal).
curl https://www.gnu.org
Pour stocker la sortie dans un fichier, vous pouvez la rediriger comme indiqué ci-dessous. Cela affichera également des statistiques de téléchargement supplémentaires.
curl https://www.gnu.org > gnu-org.html
Enregistrer la sortie cURL dans un fichier
Nous pouvons enregistrer le résultat de la commande cURL dans un fichier en utilisant -o
/-O
options.
-o
(o minuscule) le résultat sera enregistré dans le nom de fichier fourni dans la ligne de commande-O
(O majuscule) le nom de fichier dans l'URL sera pris et il sera utilisé comme nom de fichier pour stocker le résultat
curl -o my-gettext.html https://www.gnu.org/software/gettext/manual/gettext.html
En conséquence, maintenant la page gettext.html
sera enregistré dans le fichier nommé my-gettext.html
. Vous pouvez également noter que lors de l'exécution de cURL avec -o
option, il affiche la barre de progression du téléchargement comme suit.
Lorsque vous utilisez cURL -O
, il enregistrera le contenu dans le fichier nommé "gettext.html" lui-même sur la machine locale.
curl -O http://www.gnu.org/software/gettext/manual/gettext.html
Remarque :Lorsque curl
doit écrire les données sur le terminal, il désactive le compteur de progression, pour éviter toute confusion lors de l'impression. Nous pouvons utiliser >
, -o
, -O
options pour déplacer le résultat dans un fichier.
Masquer la barre de progression
cURL affiche par défaut la barre de progression. Pour le masquer -s
(--silent
) peut être utilisée.
curl -s -O http://www.gnu.org/software/gettext/manual/gettext.html
Si pour une raison quelconque cela ne fonctionne pas sur votre plateforme, vous pouvez toujours rediriger stderr vers /dev/null
:
curl -O http://www.gnu.org/software/gettext/manual/gettext.html 2>/dev/null
Récupérer plusieurs fichiers à la fois
Bien sûr, nous pouvons télécharger plusieurs fichiers en une seule fois en spécifiant les URL sur la ligne de commande.
curl -O https://www.gnu.org/software/gettext/manual/html_node/index.html -O https://www.gnu.org/software/gettext/manual/gettext.html
Suivre les en-têtes d'emplacement HTTP avec l'option -L
Cependant, par défaut, cURL ne suit pas les en-têtes HTTP Location. Il est également appelé redirections. Lorsqu'une page Web demandée est déplacée vers un autre endroit, un en-tête HTTP Location sera envoyé en tant que réponse et indiquera l'emplacement de la page Web réelle.
Nous pouvons insister sur cURL pour suivre la redirection en utilisant -L
option, comme indiqué ci-dessous.
curl -L https://www.google.com
Continuer/Reprendre un téléchargement précédent
Utiliser cURL -C
option, vous pouvez continuer un téléchargement qui a déjà été arrêté pour une raison quelconque. Cela sera utile lorsque vous téléchargez des fichiers volumineux et que le téléchargement a été interrompu.
Si nous disons -C -
, puis cURL trouvera par où commencer pour reprendre le téléchargement. On peut aussi donner un offset -C <offset>
. Les octets de décalage donnés seront ignorés depuis le début pour le fichier source.
Démarrer un gros téléchargement en utilisant curl
, et appuyez sur Ctrl-C
pour l'arrêter entre les téléchargements.
curl -O https://www.gnu.org/software/gettext/manual/gettext.html
Utilisation de curl -C -
, nous pouvons reprendre le téléchargement là où il s'était arrêté plus tôt.
curl -C - -O https://www.gnu.org/software/gettext/manual/gettext.html
Utiliser un proxy avec ou sans authentification
Si vous êtes derrière un serveur proxy qui écoute sur le port 8080 sur proxy.votredomaine.com, procédez comme suit :
curl -x proxy.yourdomain.com:8080 -U user:password -O https://www.gnu.org/software/gettext/manual/gettext.html
où vous pouvez ignorer -U user:password
si votre proxy ne nécessite pas d'authentification.
Interroger les en-têtes HTTP
Les en-têtes HTTP permettent au serveur Web distant d'envoyer des informations supplémentaires sur lui-même avec la requête proprement dite. De plus, cela fournit au client des détails sur la façon dont la demande est traitée.
Pour interroger les en-têtes HTTP d'un site Web, procédez comme suit :
curl -I https://www.gnu.org
HTTP/1.1 200 OK
Date: Mon, 13 Jul 2020 21:22:32 GMT
Server: Apache/2.4.7
Content-Location: home.html
Vary: negotiate,accept-language,Accept-Encoding
TCN: choice
Strict-Transport-Security: max-age=63072000
Access-Control-Allow-Origin: (null)
Accept-Ranges: bytes
Cache-Control: max-age=0
Expires: Mon, 13 Jul 2020 21:22:32 GMT
Content-Type: text/html
Content-Language: en
Télécharger des fichiers sur le serveur FTP
cURL peut également être utilisé pour télécharger des fichiers sur le serveur FTP avec -T
option.
curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.server.com
En conséquence, la commande ci-dessus téléchargera le fichier nommé myfile.txt
au serveur FTP. Vous pouvez également télécharger plusieurs fichiers en même temps à l'aide des opérations de plage.
curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.server.com
En option, nous pouvons utiliser .
pour obtenir l'entrée de STDIN et la transférer vers la télécommande.
curl -u ftpuser:ftppass -T - ftp://ftp.server.com/mynewfile.txt
La commande ci-dessus obtiendra l'entrée de l'utilisateur à partir de l'entrée standard et enregistrera le contenu sur le serveur ftp sous le nom mynewfile.txt
.
Vous pouvez fournir un -T
pour chaque URL et la paire spécifie quoi télécharger et où.
Télécharger des fichiers depuis le serveur FTP
cURL peut également être utilisé pour télécharger des fichiers à partir de serveurs FTP. Si le chemin FTP donné est un répertoire, par défaut, il listera les fichiers sous le répertoire spécifique.
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/mysql.php
La commande ci-dessus téléchargera le mysql.php
fichier depuis le serveur ftp et enregistrez-le dans le répertoire local.
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
Ici, l'URL donnée fait référence à un répertoire. Donc, cURL listera tous les fichiers et répertoires sous l'URL donnée.
Répertorier/Télécharger à l'aide de plages
cURL prend en charge les plages à donner dans l'URL. Lorsqu'une plage est donnée, les fichiers correspondant à la plage seront téléchargés. Il sera utile de télécharger des packages à partir des sites miroirs FTP.
curl http://ftp.us.debian.org/debian/pool/main/[a-z]/
La commande ci-dessus listera tous les packages de a-z
plages dans le terminal.
Plus d'informations à l'aide de l'option Verbose and Trace
Vous pouvez savoir ce qui se passe en utilisant le -v
option. Cette option active le mode verbeux et imprimera les détails.
curl -v https://www.gnu.org
La commande about affichera ce qui suit :
* Trying 209.51.188.148:443...
* Connected to www.gnu.org (209.51.188.148) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: CN=emacs.org
* start date: Jun 17 09:07:40 2020 GMT
* expire date: Sep 15 09:07:40 2020 GMT
* subjectAltName: host "www.gnu.org" matched cert's "www.gnu.org"
* issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
* SSL certificate verify ok.
> GET / HTTP/1.1
> Host: www.gnu.org
> User-Agent: curl/7.71.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 13 Jul 2020 21:56:04 GMT
< Server: Apache/2.4.7
< Content-Location: home.html
< Vary: negotiate,accept-language,Accept-Encoding
< TCN: choice
< Strict-Transport-Security: max-age=63072000
< Access-Control-Allow-Origin: (null)
< Accept-Ranges: bytes
< Cache-Control: max-age=0
< Expires: Mon, 13 Jul 2020 21:56:04 GMT
< Transfer-Encoding: chunked
< Content-Type: text/html
< Content-Language: en
<
...
Envoyer un courrier à l'aide du protocole SMTP
cURL peut également être utilisé pour envoyer du courrier en utilisant le protocole SMTP. Vous devez spécifier l'adresse de départ, l'adresse de destination et l'adresse IP du serveur de messagerie comme indiqué ci-dessous.
curl --mail-from [email protected] --mail-rcpt [email protected] smtp://mailserver.com
Une fois la commande ci-dessus entrée, il attendra que l'utilisateur fournisse les données au courrier. Une fois que vous avez composé votre message, tapez .
(point) comme dernière ligne, qui enverra l'e-mail immédiatement.
Vérification de l'assistance HTTP/2
Si vous disposez de la dernière version de cURL, vous pouvez utiliser --http2
option pour vérifier si une URL particulière prend en charge le nouveau protocole HTTP/2. Par conséquent, si le site prend en charge HTTP/2, vous verrez HTTP/2.0 200
dans l'en-tête au lieu de HTTP/1.1 200
.
curl -I --http2 https://www.opensource.com
Simuler les méthodes HTTP
Le GET
La méthode est utilisée pour récupérer des ressources à partir d'une URL particulière. La boucle curl https://www.gnu.org/
la commande utilisera GET
comme méthode HTTP par défaut, mais elle peut également être spécifiée à l'aide de --request GET
ou -X GET
.
curl --request GET https://www.gnu.org
Le POST
méthode est utilisée pour publier des informations sur un serveur Web (par exemple, un commentaire sur un forum). Cela peut être spécifié en utilisant --request POST
ou -X POST
.
curl --request POST https://yourwebsite.com
Le DELETE
La méthode supprime la ressource du serveur Web associée à une URL spécifique. Cela peut être spécifié en utilisant --request DELETE
ou -X DELETE
.
curl --request DELETE https://yourwebsite.com
Le PUT
La méthode crée ou remplace une ressource en fonction des données que le client soumet au serveur Web. (par exemple, créer une nouvelle page Web ou mettre à jour une page existante). Cela peut être spécifié en utilisant --request PUT
ou -X PUT
.
curl --request PUT https://yourwebsite.com
Effectuer une requête POST avec paramètres
La commande suivante enverra le animal1
et animal2
paramètres, ainsi que leurs valeurs correspondantes, à https://yourdomain.com/animals.php
curl --request POST --data "animal1=cat&animal2=dog" https://yourdomain.com/animals.php
Vous pouvez utiliser cette astuce pour simuler le comportement d'un formulaire HTML standard.
Conclusion
Dans cet article, nous avons expliqué ce qu'est cURL et ce que vous pouvez faire avec certaines commandes de base. Pour en savoir plus sur cURL, vous pouvez visiter le site Web du projet.