Aller au contenu

Maitriser la commande curl

Mise à jour :

Maîtriser la commande curl, c’est se donner les moyens d’interagir simplement avec des services distants, sans interface graphique. Que ce soit pour tester une API, télécharger des fichiers, envoyer des requêtes HTTP, ou encore travailler avec FTP ou SFTP, curl devient vite un réflexe en ligne de commande. Sa richesse fonctionnelle, sa portabilité et sa simplicité d’utilisation en font un outil incontournable pour automatiser les échanges entre machines et services.

Les fonctionnalités de curl

Curl (abréviation de Client URL) est un outil en ligne de commande conçu pour transférer des données vers ou depuis un serveur, en utilisant des protocoles comme HTTP, HTTPS, FTP, SFTP, SCP, LDAP, ou encore SMTP.

Il s’utilise aussi bien pour :

  • Télécharger un fichier depuis Internet,
  • Tester des points d’accès d’une API REST,
  • Soumettre des formulaires HTML,
  • Automatiser des transferts de fichiers,
  • Effectuer des requêtes HTTP complexes avec headers, authentification ou cookies.

Contrairement à des outils plus lourds comme Postman, curl s’utilise directement depuis un terminal, dans des scripts, ou au sein de pipelines DevOps. Sa légèreté et sa compatibilité multi-protocole en font un outil de diagnostic et d’automatisation redoutablement efficace, que l’on soit développeur ou administrateur système.

Syntaxe de base

La commande curl repose sur une structure simple et directe. En version minimale, elle se compose d’une URL, mais sa puissance vient des nombreuses options que l’on peut ajouter selon le besoin.

Terminal window
curl [options] [URL]

Les options essentielles

Voici les options les plus utilisées pour bien démarrer :

  • -o fichier : enregistre le contenu dans un fichier local nommé fichier.

    Terminal window
    curl -o page.html https://example.com
  • -O : télécharge le fichier en conservant le nom d’origine sur le serveur.

    Terminal window
    curl -O https://example.com/fichier.zip
  • -L : suit automatiquement les redirections HTTP (très utile sur des URLs raccourcies ou déplacées).

    Terminal window
    curl -L https://example.com/ancien-lien
  • -I : affiche uniquement les en-têtes HTTP (headers).

    Terminal window
    curl -I https://example.com
  • -X : spécifie une méthode HTTP (GET, POST, PUT, DELETE…).

    Terminal window
    curl -X DELETE https://api.example.com/ressource
  • -d : envoie des données dans le corps de la requête (POST par défaut).

    Terminal window
    curl -d "nom=Jean&age=30" https://example.com/formulaire
  • -H : ajoute un en-tête personnalisé (ex. JSON, token, cookie…).

    Terminal window
    curl -H "Content-Type: application/json" https://api.example.com
  • -u : utilise une authentification de type HTTP Basic.

    Terminal window
    curl -u admin:motdepasse https://example.com/admin

Avec seulement quelques options, on peut déjà simuler des appels d’API, faire du diagnostic réseau ou automatiser des interactions web. La suite du guide montrera comment tirer parti de ces options dans des cas réels.

Téléchargement de fichiers

L’un des usages les plus fréquents de curl, c’est le téléchargement de contenu depuis une URL. Il peut s’agir de pages HTML, d’archives, d’images, ou de scripts. Voici comment le faire efficacement.

Enregistrer dans un fichier spécifique

Pour télécharger une page ou un fichier et choisir le nom local :

Terminal window
curl -o fichier.html https://example.com

Cela écrit le contenu de la réponse dans un fichier nommé fichier.html.

Conserver le nom du fichier distant

Si vous voulez récupérer un fichier en gardant son nom original (extrait de l’URL) :

Terminal window
curl -O https://example.com/script.sh

Cela crée un fichier script.sh dans le répertoire courant.

Suivre les redirections

Certains liens vous redirigent automatiquement (HTTP 301 ou 302). Sans option, curl ne les suit pas. Il faut ajouter -L :

Terminal window
curl -LO https://bit.ly/exemple-lien

Cela permet d’atteindre l’URL finale et de récupérer le bon fichier.

Reprendre un téléchargement interrompu

curl peut reprendre un téléchargement si la connexion est interrompue :

Terminal window
curl -C - -O https://example.com/long-fichier.zip

L’option -C - détecte la taille du fichier existant et continue depuis là.

Télécharger plusieurs fichiers

Utilisez un fichier texte contenant une liste d’URLs :

Terminal window
curl -O https://site1.com/fichier1.txt -O https://site2.com/fichier2.jpg

Ou utilisez une boucle shell pour automatiser :

Terminal window
for url in $(cat urls.txt); do curl -O "$url"; done

Le téléchargement avec curl est très flexible. Il s’intègre parfaitement dans des scripts de déploiement, de sauvegarde ou de mise à jour automatisée.

Envoi de requêtes HTTP

curl est aussi un outil puissant pour interagir avec des APIs REST. Il permet d’envoyer tous types de requêtes HTTP : GET, POST, PUT, DELETE, avec des données, des en-têtes, ou de l’authentification.

Requête GET (par défaut)

La méthode GET est celle utilisée par défaut. Elle permet de récupérer des données sans en envoyer.

Terminal window
curl https://api.example.com/utilisateurs

Avec suivi des redirections et affichage détaillé :

Terminal window
curl -Lv https://api.example.com/utilisateurs

Requête POST avec des données simples

Envoyer des données application/x-www-form-urlencoded :

Terminal window
curl -X POST -d "nom=Alice&age=28" https://api.example.com/inscription

Par défaut, -d utilise POST, donc -X POST est optionnel ici.

Requête POST avec JSON

Envoyer une charge utile JSON nécessite de définir l’en-tête Content-Type :

Terminal window
curl -X POST -H "Content-Type: application/json" \
-d '{"email": "test@example.com", "motdepasse": "1234"}' \
https://api.example.com/connexion

Requête PUT ou DELETE

Simuler des requêtes de modification ou suppression :

Terminal window
curl -X PUT -H "Content-Type: application/json" \
-d '{"status": "actif"}' \
https://api.example.com/utilisateurs/42
Terminal window
curl -X DELETE https://api.example.com/utilisateurs/42

Envoi de plusieurs en-têtes

Vous pouvez envoyer plusieurs headers HTTP personnalisés :

Terminal window
curl -H "Accept: application/json" \
-H "Authorization: Bearer MON_TOKEN" \
https://api.example.com/profil

Ces usages de curl sont particulièrement utiles pour tester une API REST sans outil graphique, automatiser des appels d’API, ou déboguer des erreurs côté serveur.

Authentification

De nombreuses APIs ou serveurs exigent une authentification pour accéder à leurs ressources. curl prend en charge plusieurs méthodes : HTTP Basic, token Bearer, ou encore authentification FTP/SFTP.

Authentification HTTP Basic

C’est la forme la plus simple, où l’on transmet un nom d’utilisateur et un mot de passe encodés en base64 :

Terminal window
curl -u utilisateur:motdepasse https://api.example.com/securise

Cette méthode fonctionne pour les APIs ou interfaces d’administration protégées par une fenêtre d’identification classique dans le navigateur.

Authentification via en-tête Bearer (token)

De nombreuses APIs modernes utilisent un jeton d’authentification (JWT ou autre) à inclure dans l’en-tête HTTP Authorization :

Terminal window
curl -H "Authorization: Bearer VOTRE_TOKEN" https://api.example.com/profil

Ce type de jeton est souvent obtenu via une requête POST en échange d’identifiants (flow OAuth ou authentification custom).

Authentification avec fichiers de configuration

Pour éviter de taper ses identifiants en clair ou d’utiliser des tokens en ligne de commande, curl permet de stocker des options dans un fichier :

Exemple : curl.conf

Terminal window
--user utilisateur:motdepasse
--url https://api.example.com/securise

Et pour l’utiliser :

Terminal window
curl -K curl.conf

Authentification FTP ou SFTP

curl peut aussi s’authentifier à un serveur FTP :

Terminal window
curl -u ftpuser:ftppass ftp://ftp.example.com/fichier.txt

Ou en SFTP :

Terminal window
curl -u user:sftpmdp sftp://serveur.example.com/dossier/

Quel que soit le protocole ou le mode d’authentification, curl fournit les mécanismes nécessaires pour tester en local, script-er l’accès sécurisé, ou intégrer des appels protégés dans vos automatisations.

Utilisation avec FTP/SFTP

La commande curl permet également de transférer des fichiers via les protocoles FTP et SFTP, en lecture comme en écriture. C’est très utile pour automatiser des transferts vers des serveurs distants, des sauvegardes ou des publications.

Télécharger un fichier via FTP

Pour récupérer un fichier depuis un serveur FTP :

Terminal window
curl -u utilisateur:motdepasse ftp://ftp.example.com/fichier.txt -O
  • -u : fournit les identifiants
  • ftp:// : spécifie le protocole
  • -O : conserve le nom du fichier d’origine

Téléverser un fichier via FTP

Pour envoyer un fichier vers un serveur FTP :

Terminal window
curl -T monfichier.txt -u utilisateur:motdepasse ftp://ftp.example.com/
  • -T : indique le fichier à téléverser

Téléverser un fichier via SFTP

Même principe que pour FTP, mais avec un protocole sécurisé :

Terminal window
curl -T fichier.txt -u user:motdepasse sftp://sftp.example.com/chemin/

Lister le contenu d’un répertoire FTP

Pour obtenir la liste des fichiers d’un répertoire distant :

Terminal window
curl -u utilisateur:motdepasse ftp://ftp.example.com/

Cela renvoie une vue brute du contenu du répertoire cible.

Ajouter un port personnalisé

Si le serveur n’utilise pas les ports standards :

Terminal window
curl -u user:pass ftp://ftp.example.com:2121/fichier.txt -O

Avec ces commandes, on peut automatiser des envois et récupérations de fichiers, sans passer par un client FTP graphique. curl devient alors un composant clé dans les scripts de déploiement ou de synchronisation.

Téléversement de fichiers

Avec curl, il est aussi possible de téléverser (uploader) des fichiers vers un serveur, notamment via des formulaires HTML (en multipart/form-data) ou via FTP/SFTP. Voici les cas les plus courants.

Téléverser un fichier avec POST (multipart/form-data)

Pour simuler l’envoi d’un fichier depuis un formulaire HTML :

Terminal window
curl -F "fichier=@/chemin/vers/image.jpg" https://example.com/upload
  • -F : envoie les données comme un formulaire
  • @ : indique que le contenu du fichier doit être envoyé

Téléverser plusieurs fichiers en une seule requête

On peut envoyer plusieurs champs, y compris plusieurs fichiers :

Terminal window
curl -F "photo1=@image1.jpg" -F "photo2=@image2.jpg" https://example.com/galerie

Et aussi ajouter des champs texte en même temps :

Terminal window
curl -F "titre=Vacances" -F "photo=@plage.jpg" https://example.com/album

Téléversement via PUT (API REST)

Certaines APIs acceptent l’envoi de fichiers via une méthode PUT :

Terminal window
curl -T script.sh -X PUT https://api.example.com/scripts/

Vous pouvez aussi définir un en-tête MIME spécifique :

Terminal window
curl -T data.csv -H "Content-Type: text/csv" https://api.example.com/donnees

Téléversement via FTP/SFTP (rappel)

Pour envoyer un fichier via FTP :

Terminal window
curl -T fichier.txt -u user:pass ftp://ftp.example.com/

Et en SFTP :

Terminal window
curl -T archive.tar.gz -u user:pass sftp://sftp.example.com/uploads/

Ces fonctions de téléversement sont particulièrement utiles dans les scripts d’automatisation : publication de contenu, sauvegarde de fichiers sur un serveur, ou tests d’interfaces de formulaire sans interface graphique.

Utilisation avancée

Au-delà des requêtes simples, curl offre des options puissantes pour des usages plus complexes : proxy, user-agent, cookies, debug, configuration, etc. Ces fonctions permettent d’intégrer curl dans des contextes professionnels ou automatisés.

Utiliser un proxy

Pour faire passer une requête par un serveur proxy HTTP :

Terminal window
curl -x http://proxy.mondomaine.local:3128 https://example.com

Et pour un proxy avec authentification :

Terminal window
curl -x http://proxy:port -U utilisateur:motdepasse https://example.com

Spécifier un User-Agent personnalisé

Certains serveurs répondent différemment selon le navigateur simulé. Pour changer l’identifiant du client :

Terminal window
curl -A "Mozilla/5.0 (compatible; curl-test)" https://example.com

Gérer les cookies

Enregistrer les cookies dans un fichier :

Terminal window
curl -c cookies.txt https://example.com/login

Puis les réutiliser :

Terminal window
curl -b cookies.txt https://example.com/espace-prive

Afficher les détails de la requête et de la réponse

L’option -v (verbose) donne une vue complète des échanges réseau :

Terminal window
curl -v https://example.com

Pour un affichage encore plus complet avec les en-têtes envoyés et reçus :

Terminal window
curl -i -v https://example.com

Limiter le débit

Simuler une connexion lente avec --limit-rate :

Terminal window
curl --limit-rate 100k -O https://example.com/film.mp4

Utiliser un fichier de configuration

Vous pouvez enregistrer les options curl dans un fichier texte :

options.conf :

--user utilisateur:mdp
--header "Accept: application/json"
--url https://api.example.com/data

Et exécuter :

Terminal window
curl -K options.conf

Avec ces options avancées, curl devient un véritable couteau suisse réseau, capable de s’adapter à des environnements complexes, sécurisés ou simulés. Parfait pour les scripts, tests automatisés, ou environnements d’entreprise.

Bonnes pratiques

Pour tirer le meilleur parti de curl, il est utile d’adopter quelques habitudes simples qui rendent vos commandes plus sûres, plus lisibles et plus réutilisables. Voici les conseils que j’applique personnellement dans mes scripts et tests.

Toujours vérifier la version installée

Certaines fonctionnalités peuvent ne pas être disponibles dans les versions plus anciennes :

Terminal window
curl --version

Cela vous donne aussi les protocoles pris en charge (HTTP/2, SSL, etc.).

Utiliser --silent pour les scripts automatisés

Pour éviter le bruit dans les scripts (barres de progression ou erreurs mineures) :

Terminal window
curl --silent --fail --show-error -o fichier.txt https://example.com
  • --silent : supprime la sortie normale
  • --fail : renvoie une erreur si le HTTP code ≥ 400
  • --show-error : affiche les erreurs s’il y en a

Préférer les fichiers de configuration pour les commandes longues

Plutôt que de taper une commande de 5 lignes, placez les options dans un fichier curl.conf, et lancez :

Terminal window
curl -K curl.conf

C’est plus lisible, versionnable et facile à relire.

Toujours spécifier les en-têtes explicitement pour les API

De nombreuses APIs nécessitent Content-Type: application/json. Soyez explicite :

Terminal window
curl -H "Content-Type: application/json" ...

Et pour les autorisations :

Terminal window
curl -H "Authorization: Bearer VOTRE_TOKEN"

Ne jamais exposer de mots de passe dans des scripts partagés

Évitez les identifiants en dur dans les lignes de commande. Utilisez des variables d’environnement ou des fichiers sécurisés :

Terminal window
curl -u "$USER:$MDP" ...

Ou encore :

Terminal window
source .env && curl -u "$FTP_USER:$FTP_PASS" ...

Bien commenter ses commandes complexes

Un fichier curl.sh bien commenté est plus facile à maintenir qu’une suite de lignes obscures. Expliquez les paramètres importants avec des #.

Adopter ces bonnes pratiques permet d’utiliser curl de façon fiable, claire et sécurisée, que ce soit dans des scripts critiques, des tests d’API, ou des environnements automatisés.

Conclusion

Maîtriser la commande curl, c’est disposer d’un outil simple mais extrêmement puissant pour interagir avec le web, les APIs, ou des serveurs distants. Grâce à sa flexibilité et sa portabilité, elle s’intègre parfaitement dans les workflows d’administration, de test et d’automatisation. En ligne de commande comme en script, curl reste un incontournable du quotidien.