8 façons d'utiliser Curl
L'outil de ligne de commande Curl est l'un des programmes les plus utiles et les plus polyvalents que vous puissiez apprendre. Sa polyvalence et sa mise en œuvre complète HTTP signifient que, s'il y a une URL pour cela, Curl peut le faire.
Sommaire
8
Récupérer une page Web
Dans sa forme la plus élémentaire, Curl récupère une URL et affiche son contenu sur votre terminal:
curl info.cern.ch
Ce que vous voyez dépendra du type de contenu de l'URL. Si vous demandez une page Web, vous verrez sa source HTML:
Vous pouvez rediriger cette sortie vers un fichier pour enregistrer une page Web:
curl info.cern.ch > info.cern.ch.html
Remarquez comment Curl détecte que vous redirigez la sortie normale et envoie des informations de synchronisation à Stderr:
Une URL peut contenir des caractères avec une signification particulière pour la coquille, comme «?» ou « #. » Vous devrez faire attention à éviter les problèmes que cela peut causer, alors assurez-vous que vous entourez des URL avec des citations uniques si elles contiennent des caractères spéciaux. Si vous n'êtes pas sûr, soyez prudent et citez-les toujours:
curl 'info.cern.ch'
En rapport
Comment tuer et rediriger comme un pro dans la ligne de commande Linux
Beaucoup de mains font fonctionner la lumière.
7
Télécharger un fichier
Si vous essayez d'utiliser Curl pour télécharger un fichier binaire – comme une image ou un document Microsoft Word – vous verrez une erreur vous indiquant que «la sortie binaire peut gâcher votre terminal». En effet, Curl imprimera le corps de réponse qu'il reçoit à la sortie. Dans le cas d'une image, ce n'est certainement pas ce que vous voulez faire.
Le message d'erreur mentionne l'option –Output, qui vous permet de spécifier un fichier pour enregistrer la sortie plutôt que de l'imprimer. Vous pouvez également utiliser -O comme un équivalent plus court:
curl -o neo-the-cat.jpg https://placecats.com/neo/300/200
Cela enregistrera le fichier sur cette URL dans le répertoire actuel. Comme précédemment, comme Curl ne sort plus la réponse, il fournit beaucoup de détails sur le moment où votre téléchargement prend. Si vous voulez plutôt une barre de progression simple, utilisez le – # ou –Progress-Bar option:
curl --progress-bar -o neo-the-cat.jpg https://placecats.com/neo/300/200
6
Installer un logiciel
Vous pouvez parfois rencontrer des instructions d'installation qui vous demandent d'utiliser Curl. Par exemple, Atuin – un remplacement de la commande d'historique – a l'instruction d'installation suivante:
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh
Si vous ouvrez cette URL dans un navigateur Web, vous verrez un script shell qui effectue l'installation et la configuration. Vous pouvez le télécharger et l'exécuter manuellement si vous le souhaitez, le Shell One-Liner est juste un moyen plus rapide. Notez que la sortie – le contenu de ce script – est tuée sur SH qui l'exécutera en tant que script shell.
L'utilisation de boucles suggérée dans l'exemple d'Atuin utilise ces options:
-
–proto '= https' pour s'assurer que Curl utilise le protocole HTTPS.
-
–TLSV1.2 pour forcer Curl à utiliser la version 1.2 TLS ou plus.
-
-L pour suivre automatiquement les redirections.
-
-SS pour supprimer le compteur de progrès mais afficher toujours des messages d'erreur.
-
-F pour traiter une erreur HTTP comme une erreur de commande. Il s'agit de garantir qu'aucun message d'erreur ne soit transmis à Sh, en évitant une action potentiellement dangereuse.
L'exécution d'un script shell téléchargé sur Internet est risqué parce que vous ne savez pas exactement ce qu'il fera. Non seulement vous avez besoin de faire confiance à la source, mais vous devez également être sûr que vous êtes sécurisé à partir de toutes les attaques de l'homme au milieu. HTTPS peut aider à atténuer ce risque, mais si vous voulez être très prudent, envisagez de supprimer le tuyau, de télécharger le fichier et de vérifier qu'il est sûr de fonctionner avant de le faire.
5
Vérifiez votre adresse IP
Cette utilisation pratique pour Curl est un moyen rapide et facile de découvrir votre adresse IP publique, grâce au service à ifconfig.co:
curl ifconfig.co
Le site répond avec votre adresse IP publique:
Cette sortie par défaut est un texte brut, ce qui en fait une excellente ressource pour l'automatisation. Vous remarquerez peut-être que vous obtenez un résultat très différent si vous accédez à la même URL dans votre navigateur Web:
En effet, le site se comporte différemment en fonction de votre agent utilisateur. Par défaut, Curl envoie quelque chose comme «Curl / 8.7.1» dans l'en-tête d'utilisateur-agent. Si vous avez besoin de définir ceci sur autre chose, par exemple à des fins de test, utilisez l'option -a / – utilisateur-agent:
curl -s --user-agent "my pretend browser" ifconfig.co | head
Maintenant, le site ifconfig répondra avec HTML, tout comme dans un navigateur Web:
En rapport
Comment obtenir votre IP publique dans un script Linux Bash
À l'extérieur, en regardant dedans.
Parfois, vous voulez récupérer uniquement les en-têtes de réponse d'une URL. Vous pourriez déboguer une erreur ou vérifier les en-têtes de cache pour voir si vous avez besoin de refléter un fichier. Pour afficher uniquement les en-têtes de réponse, utilisez -I / – tête:
curl -I example.com
Cela enverra une demande de tête, que tous les serveurs Web ne prennent pas en charge. Si vous obtenez une erreur en utilisant cette méthode, vous pouvez dire à Curl d'envoyer une demande de GET et de sortir uniquement les en-têtes:
curl -I -X GET example.com
Si vous souhaitez voir les en-têtes de demande que Curl envoie, utilisez l'option –verbose / -v:
3
Accéder à une API
Si vous travaillez avec une API, un bon client comme Postman ou la publication vous aidera à automatiser et à déboguer la tâche. Mais Curl peut être tout aussi utile pour explorer le fonctionnement d'une API.
Le service Dummyjson est un bon point de départ. Ce site fournit un exemple d'API avec des données factices que vous pouvez utiliser pour tester les applications clients et vos propres programmes. Vous pouvez utiliser différents points de terminaison pour vérifier les redirections, les tests d'autorisation et simuler des retards de temps ou des réponses aléatoires.
Essayer le service avec Curl est aussi simple que de passer le point de terminaison approprié:
curl https://dummyjson.com/test
Vous devriez voir un document JSON simple en réponse, avec deux propriétés. La propriété de la méthode reflétera la méthode HTTP de votre demande:
Une fois que vous avez récupéré les données d'une API, vous pouvez facilement les traiter à l'aide d'outils de ligne de commande standard. Par exemple, vous pouvez traiter les données JSON à l'aide de JQ. Ce pipeline récupère les données du produit à l'aide de Curl, puis la transmet à JQ pour extraire le premier produit:
curl https://dummyjson.com/products | jq '.products(0)' | more
En rapport
Comment analyser les fichiers JSON sur la ligne de commande Linux avec JQ
Vous pouvez utiliser JQ pour interroger les données JSON sur la ligne de commande Linux. Nous allons vous aider à démarrer!
Un de mes projets actuels est un client RSS basé sur Shell. À son cœur se trouve la boucle car l'outil est si pratique et prend en charge chaque opération HTTP de bas niveau dont j'ai besoin. Par exemple, vous pouvez récupérer un flux RSS et examiner son contenu à l'aide de Curl:
curl -s https://www.w3.org/blog/feed/ | more
Si vous avez installé libxml, vous pouvez traiter la sortie XML à l'aide de XMLLINT:
curl -s https://www.w3.org/blog/feed/ | xmllint --xpath '//channel/title/text()' -
Ce pipeline utilise XMllint pour évaluer une expression XPATH qui extrait les données de XML, dans ce cas, le titre du canal:
1
Utiliser Curl programmatiquement
Le projet Curl dépend de plus que simplement Curl, l'outil de ligne de commande. Il comprend également une bibliothèque, Libcurl, que Curl s'utilise. Cette bibliothèque est hautement portable et disponible pour toutes sortes de systèmes d'exploitation, notamment Linux, Windows, MacOS et Android. Libcurl est livré avec une API C, mais il y a des liaisons pour de nombreuses autres langues comme C ++, Python, Rust et GO.
La bibliothèque reflète une grande partie de ce que fait l'outil de ligne de commande, en particulier ses options et leur comportement. Voici un exemple de base d'utilisation de PHP:
$ch = curl_init("http://www.example.com/");
$fp = fopen("www-example-com.html", "w");curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
if (curl_error($ch))
fwrite($fp, curl_error($ch));
curl_close($ch);
fclose($fp);
?>
La fonction curl_init () démarre une session et renvoie une poignée que vous pouvez utiliser pour y accéder. Vous pouvez contrôler le comportement de la bibliothèque à l'aide des options que Curl prend en charge via Curl_setopt (). curl_exec () envoie réellement la demande tandis que curl_error () et curl_close () sont des fonctions d'administration utiles.
Cet exemple utilise le paramètre curlopt_file pour écrire le corps de réponse à une poignée de fichier ouverte. Notez qu'il s'agit de l'équivalent de l'option Curl – Output.
Si vous recherchez d'autres outils basés sur des terminaux pour maîtriser, apprenez quelques commandes GIT de base ou regardez quelques exemples de script bash.
