GNU/Linux >> Tutoriels Linux >  >> Cent OS

Tutoriel de commande cURL avec exemples

cURL est un outil de ligne de commande et une bibliothèque qui peuvent être utilisés pour recevoir et envoyer des données entre un client et un serveur ou deux machines connectées via Internet. Il prend en charge une large gamme de protocoles tels que HTTP, FTP, IMAP, LDAP, POP3, SMTP et bien d'autres.

En raison de sa nature polyvalente, cURL est utilisé dans de nombreuses applications et pour de nombreux cas d'utilisation. Par exemple, l'outil de ligne de commande peut être utilisé pour télécharger des fichiers, tester des API et déboguer des problèmes de réseau. Dans cet article, nous verrons comment vous pouvez utiliser l'outil de ligne de commande cURL pour effectuer diverses tâches.

Contenu

  • 1 Installer cURL

    • Linux 1.1
    • 1.2 Mac OS
    • 1.3 Windows
  • 2 utilisation de base de cURL
  • 3 Télécharger des fichiers avec cURL
  • 4 Anatomie d'une requête/réponse HTTP
  • 5 Suivre des redirections avec cURL
  • 6 Affichage des en-têtes de réponse avec cURL
  • 7 Affichage des en-têtes de requête et des détails de connexion
  • 8 erreurs de silence
  • 9 Configuration des en-têtes de requête HTTP avec cURL
  • 10 Faire des requêtes POST avec cURL
  • 11 Envoi de données JSON avec cURL
  • 12 Modification de la méthode de requête
  • 13 Réplication des requêtes du navigateur avec cURL
  • 14 Faire échouer cURL sur des erreurs HTTP
  • 15 Faire des requêtes authentifiées avec cURL
  • 16 Prise en charge du protocole de test avec cURL
  • 17 Définition de l'en-tête Host et de l'option -resolve de cURL
  • 18 Résoudre les domaines en adresses IPv4 et IPv6
  • 19 Désactivation des vérifications de certificat de cURL
  • 20 dépannage des problèmes de site Web avec "cURL timing breaking"
  • 21 fichiers de configuration cURL
  • 22 Conclusion

Installer cURL

Linux

La plupart des distributions Linux ont cURL installé par défaut. Pour vérifier s'il est installé sur votre système ou non, tapez curl dans la fenêtre de votre terminal et appuyez sur Entrée. S'il n'est pas installé, il affichera une erreur "commande introuvable". Utilisez les commandes ci-dessous pour l'installer sur votre système.

Pour les systèmes basés sur Ubuntu/Debian, utilisez :

sudo apt update
sudo apt install curl

Pour les systèmes CentOS/RHEL, utilisez :

sudo yum install curl

En revanche, pour les systèmes Fedora, vous pouvez utiliser la commande :

sudo dnf install curl

MacOS

MacOS est livré avec cURL préinstallé et reçoit des mises à jour chaque fois qu'Apple publie des mises à jour pour le système d'exploitation. Cependant, si vous souhaitez installer la version la plus récente de cURL, vous pouvez installer le curl Forfait maison. Une fois que vous avez installé Homebrew, vous pouvez l'installer avec :

brew install curl

Windows

Pour Windows 10 version 1803 et supérieure, cURL est désormais livré par défaut dans l'invite de commande, vous pouvez donc l'utiliser directement à partir de là. Pour les anciennes versions de Windows, le projet cURL contient des binaires Windows. Une fois le fichier ZIP téléchargé et extrait, vous trouverez un dossier nommé curl-<version number>-mingw . Déplacez ce dossier dans un répertoire de votre choix. Dans cet article, nous supposerons que notre dossier est nommé curl-7.62.0-win64-mingw , et nous l'avons déplacé sous C: .

Ensuite, vous devez ajouter le bin de cURL répertoire vers le répertoire Windows PATH variable d'environnement, afin que Windows puisse la trouver lorsque vous tapez curl dans l'invite de commande. Pour que cela fonctionne, vous devez suivre ces étapes :

  • Ouvrez la boîte de dialogue "Propriétés système avancées" en exécutant systempropertiesadvanced à partir de la boîte de dialogue Exécuter de Windows (touche Windows + R).
  • Cliquez sur le bouton "Variables d'environnement".
  • Double-cliquez sur "Chemin" dans la section "Variables système" et ajoutez le chemin C:curl-7.62.0-win64-mingwbin . Pour Windows 10, vous pouvez le faire avec le bouton "Nouveau" à droite. Sur les anciennes versions de Windows, vous pouvez taper ;C:curl-7.62.0-win64-mingwbin (notez le point-virgule au début) à la fin de la zone de texte "Valeur".

Une fois que vous avez terminé les étapes ci-dessus, vous pouvez taper curl pour vérifier si cela fonctionne. Si tout s'est bien passé, vous devriez voir le résultat suivant :

C:UsersAdministrator>curl
curl: try 'curl --help' or 'curl --manual' for more information

Utilisation de base de cURL

La syntaxe de base de l'utilisation de cURL est simplement :

curl <url>

Cela récupère le contenu disponible à l'URL donnée et l'imprime sur le terminal. Par exemple, si vous exécutez curl example.com , vous devriez pouvoir voir la page HTML imprimée, comme illustré ci-dessous :

C'est l'opération la plus basique que cURL puisse effectuer. Dans les prochaines sections, nous examinerons les différentes options de ligne de commande acceptées par cURL.



Télécharger des fichiers avec cURL

Comme nous l'avons vu, cURL télécharge directement le contenu de l'URL et l'imprime sur le terminal. Cependant, si vous souhaitez enregistrer la sortie sous forme de fichier, vous pouvez spécifier un nom de fichier avec le -o option, comme ceci :

curl -o vlc.dmg https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg

En plus d'enregistrer le contenu, cURL passe à l'affichage d'une jolie barre de progression avec des statistiques de téléchargement, telles que la vitesse et le temps pris :

Au lieu de fournir un nom de fichier manuellement, vous pouvez laisser cURL déterminer le nom de fichier avec le -O option. Donc, si vous souhaitez enregistrer l'URL ci-dessus dans le fichier vlc-3.0.4.dmg , vous pouvez simplement utiliser :

curl -O https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg

Gardez à l'esprit que lorsque vous utilisez le -o ou le -O options et qu'un fichier du même nom existe, cURL le remplacera.

Si vous avez un fichier partiellement téléchargé, vous pouvez reprendre le téléchargement du fichier avec le -C - option, comme indiqué ci-dessous :

curl -O -C - https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg

Comme la plupart des autres outils de ligne de commande, vous pouvez combiner différentes options ensemble. Par exemple, dans la commande ci-dessus, vous pouvez combiner -O -C - et écrivez-le sous la forme -OC - .

Anatomie d'une requête/réponse HTTP

Avant d'approfondir les fonctionnalités prises en charge par cURL, nous discuterons un peu des requêtes et des réponses HTTP. Si vous connaissez ces concepts, vous passez directement aux autres sections.

Pour demander une ressource telle qu'une page Web, ou pour soumettre des données à un serveur, un client HTTP (tel qu'un navigateur ou cURL) envoie une requête HTTP au serveur. Le serveur répond par une réponse HTTP, qui contient le "contenu ” de cette page.

Les requêtes HTTP contiennent la méthode de requête, l'URL, certains en-têtes et certaines données facultatives dans le cadre du « corps de la requête ». La méthode de requête contrôle la façon dont une certaine requête doit être traitée. Les types de méthodes de requête les plus courants sont « GET » et « POST ». En règle générale, nous utilisons des requêtes "GET" pour récupérer une ressource du serveur et "POST" pour soumettre des données au serveur pour traitement. Les requêtes "POST" contiennent généralement des données dans le corps de la requête, que le serveur peut utiliser.

Les réponses HTTP sont similaires et contiennent le code d'état, certains en-têtes et un corps. Le corps contient les données réelles que les clients peuvent afficher ou enregistrer dans un fichier. Le code d'état est un code à 3 chiffres qui indique au client si la demande a réussi ou échoué, et comment elle doit continuer. Les codes d'état courants sont 2xx (succès), 3xx (redirection vers une autre page) et 4xx/5xx (pour les erreurs).

HTTP est un "protocole de couche application" et il s'exécute sur un autre protocole appelé TCP. Il se charge de retransmettre les données perdues et garantit que le client et le serveur transmettent les données à un débit optimal. Lorsque vous utilisez HTTPS, un autre protocole appelé SSL/TLS s'exécute entre TCP et HTTP pour sécuriser les données.

Le plus souvent, nous utilisons des noms de domaine tels que google.com pour accéder aux sites Web. Le mappage du nom de domaine à une adresse IP s'effectue via un autre protocole appelé DNS.



Vous devriez maintenant avoir suffisamment de connaissances pour comprendre le reste de cet article.

Suivre les redirections avec cURL

Par défaut, lorsque cURL reçoit une redirection après avoir fait une demande, il ne fait pas automatiquement de demande à la nouvelle URL. Par exemple, considérons l'URL https://www.facebook.com . Lorsque vous effectuez une requête à l'aide de cette URL, le serveur envoie une redirection HTTP 3XX vers https://www.facebook.com/ . Cependant, le corps de la réponse est autrement vide. Donc, si vous essayez ceci, vous obtiendrez une sortie vide :

Si vous voulez que cURL suive ces redirections, vous devez utiliser le -L option. Si vous répétez faites une demande pour https://www.facebook.com/ avec le -L drapeau, comme ceci :

curl -L https://www.facebook.com/

Maintenant, vous pourrez voir le contenu HTML de la page, similaire à la capture d'écran ci-dessous. Dans la section suivante, nous verrons comment vérifier qu'il existe une redirection HTTP 3XX.

Veuillez garder à l'esprit que cURL ne peut suivre les redirections que si le serveur a répondu par une "redirection HTTP", ce qui signifie que le serveur a utilisé un code d'état 3XX et qu'il a utilisé l'en-tête "Location" pour indiquer la nouvelle URL. cURL ne peut pas traiter les méthodes de redirection basées sur Javascript ou HTML, ou le "Refresh header".

S'il y a une chaîne de redirections, le -L l'option ne suivra les redirections que jusqu'à 500 fois. Vous pouvez contrôler le nombre de redirections maximum qu'il suivra avec le --max-redirs drapeau.

curl -L --max-redirs 700 example.com

Si vous définissez cet indicateur sur -1 , il suivra les redirections à l'infini.

curl -L --max-redirs -1 example.com

Affichage des en-têtes de réponse avec cURL

Lors du débogage de problèmes avec un site Web, vous souhaiterez peut-être afficher les en-têtes de réponse HTTP envoyés par le serveur. Pour activer cette fonctionnalité, vous pouvez utiliser le -i option.

Continuons avec notre exemple précédent, et confirmons qu'il y a bien une redirection HTTP 3XX lorsque vous faites une requête HTTP à https://www.facebook.com/ , en exécutant :

curl -L -i https://www.facebook.com/

Notez que nous avons également utilisé -L afin que cURL puisse suivre les redirections. Il est également possible de combiner ces deux options et de les écrire sous la forme -iL ou -Li au lieu de -L -i .

Une fois la commande exécutée, vous pourrez voir la redirection HTTP 3XX, ainsi que la page de réponse HTTP 200 OK après avoir suivi la redirection :

Si vous utilisez le -o /-O option en combinaison avec -i , les en-têtes et le corps de la réponse seront enregistrés dans un seul fichier.

Afficher les en-têtes de requête et les détails de connexion

Dans la section précédente, nous avons vu comment afficher les en-têtes de réponse HTTP à l'aide de cURL. Cependant, vous souhaiterez parfois afficher plus de détails sur une demande, tels que les en-têtes de demande envoyés et le processus de connexion. cURL propose le -v drapeau (appelé "mode verbeux") à cette fin, et il peut être utilisé comme suit :

curl -v https://www.booleanworld.com/

La sortie contient des données de requête (marquées par > ), les en-têtes de réponse (marqués avec < ) et d'autres détails sur la demande, tels que l'adresse IP utilisée et le processus de prise de contact SSL (marqué avec * ). Le corps de la réponse est également disponible sous ces informations. (Cependant, cela n'est pas visible dans la capture d'écran ci-dessous).

Le plus souvent, nous ne sommes pas intéressés par le corps de la réponse. Vous pouvez simplement le masquer en "enregistrant" la sortie sur le périphérique nul, qui est /dev/null sous Linux et MacOS et NUL sous Windows :

curl -vo /dev/null https://www.booleanworld.com/ # Linux/MacOS
curl -vo NUL https://www.booleanworld.com/ # Windows

Silence des erreurs

Auparavant, nous avons vu que cURL affiche une barre de progression lorsque vous enregistrez la sortie dans un fichier. Malheureusement, la barre de progression peut ne pas être utile dans toutes les circonstances. Par exemple, si vous masquez la sortie avec -vo /dev/null , une barre de progression apparaît qui n'est pas du tout utile.

Vous pouvez masquer toutes ces sorties supplémentaires en utilisant le -s entête. Si nous continuons avec notre exemple précédent mais masquons la barre de progression, alors les commandes seraient :

curl -svo /dev/null https://www.booleanworld.com/ # Linux/MacOS
curl -svo NUL https://www.booleanworld.com/ # Windows

Le -s L'option est un peu agressive, car elle masque même les messages d'erreur. Pour votre cas d'utilisation, si vous souhaitez masquer la barre de progression, mais toujours afficher les erreurs, vous pouvez combiner le -S option.

Ainsi, si vous essayez d'enregistrer la sortie cURL dans un fichier mais que vous souhaitez simplement masquer la barre de progression, vous pouvez utiliser :

curl -sSvo file.html https://www.booleanworld.com/

Définir les en-têtes de requête HTTP avec cURL

Lors du test des API, vous devrez peut-être définir des en-têtes personnalisés sur la requête HTTP. cURL a le -H option que vous pouvez utiliser à cette fin. Si vous souhaitez envoyer l'en-tête personnalisé X-My-Custom-Header avec la valeur 123 à https://httpbin.org/get , vous devez exécuter :

curl -H 'X-My-Custom-Header: 123' https://httpbin.org/get

(httpbin.org est un site Web très utile qui vous permet d'afficher les détails de la requête HTTP que vous lui avez envoyée.)

Les données renvoyées par l'URL montrent que cet en-tête a bien été défini :

Vous pouvez également remplacer les en-têtes par défaut envoyés par cURL tels que les en-têtes "User-Agent" ou "Host". Le client HTTP (dans notre cas, cURL) envoie l'en-tête "User-Agent" pour indiquer au serveur le type et la version du client utilisé. De plus, le client utilise l'en-tête "Host" pour indiquer au serveur le site qu'il doit servir. Cet en-tête est nécessaire car un serveur Web peut héberger plusieurs sites Web à une seule adresse IP.

De plus, si vous souhaitez définir plusieurs en-têtes, vous pouvez simplement répéter le -H option selon les besoins.

curl -H 'User-Agent: Mozilla/5.0' -H 'Host: www.google.com' ...

Cependant, cURL a certains raccourcis pour les drapeaux fréquemment utilisés. Vous pouvez définir l'en-tête "User-Agent" avec le -A choix :

curl -A Mozilla/5.0 https://httpbin.org/get

L'en-tête "Referer" est utilisé pour indiquer au serveur l'emplacement à partir duquel ils ont été référencés par le site précédent. Il est généralement envoyé par les navigateurs lors de la demande de Javascript ou d'images liées à une page, ou lors du suivi de redirections. Si vous souhaitez définir un en-tête "Referer", vous pouvez utiliser le -e drapeau :

curl -e https://www.google.com/ https://httpbin.org/get

Sinon, si vous suivez un ensemble de redirections, vous pouvez simplement utiliser -e ';auto' et cURL se chargera de définir lui-même les redirections.

Faire des requêtes POST avec cURL

Par défaut, cURL envoie des requêtes GET, mais vous pouvez également l'utiliser pour envoyer des requêtes POST avec le -d ou --data option. Tous les champs doivent être renseignés sous la forme key=value paires séparées par l'esperluette (& ) personnage. Par exemple, vous pouvez envoyer une requête POST à ​​httpbin.org avec certains paramètres :

curl --data "firstname=boolean&lastname=world" https://httpbin.org/post

À partir de la sortie, vous pouvez facilement dire que nous avons affiché deux paramètres (cela apparaît sous la touche "form") :

Tous les caractères spéciaux tels que @ , %= ou les espaces dans la valeur doivent être codés manuellement en URL. Donc, si vous vouliez soumettre un paramètre "email" avec la valeur "[email protected]", vous utiliseriez :

curl --data "email=test%40example.com" https://httpbin.org/post

Sinon, vous pouvez simplement utiliser --data-urlencode pour gérer cela pour vous. Si vous vouliez soumettre deux paramètres, email et name , voici comment utiliser l'option :

curl --data-urlencode "[email protected]" --data-urlencode "name=Boolean World" https://httpbin.org/post

Si le --data le paramètre est trop grand pour être saisi sur le terminal, vous pouvez l'enregistrer dans un fichier puis le soumettre en utilisant @ , comme ceci :

curl --data @params.txt example.com

Jusqu'à présent, nous avons vu comment effectuer des requêtes POST à ​​l'aide de cURL. Si vous souhaitez télécharger des fichiers à l'aide d'une requête POST, vous pouvez utiliser le -F option ("formulaire"). Ici, nous allons soumettre le fichier test.c , sous le nom de paramètre file :

curl -F [email protected] https://httpbin.org/post

Cela montre le contenu du fichier, montrant qu'il a été soumis avec succès :

Envoi de données JSON avec cURL

Dans la section précédente, nous avons vu comment soumettre des requêtes POST en utilisant cURL. Vous pouvez également soumettre des données JSON en utilisant le --data option. Cependant, la plupart des serveurs s'attendent à recevoir une requête POST avec des paires clé-valeur, similaires à celles dont nous avons parlé précédemment. Vous devez donc ajouter un en-tête supplémentaire appelé "Content-Type :application/json" afin que le serveur comprenne qu'il traite les données JSON et les gère de manière appropriée. De plus, vous n'avez pas besoin d'encoder les données en URL lors de la soumission de JSON.

Donc, si vous avez les données JSON suivantes et que vous souhaitez faire une requête POST à ​​https://httpbin.org/post :

{
  "email": "[email protected]",
  "name": ["Boolean", "World"]
}

Ensuite, vous pouvez soumettre les données avec :

curl --data '{"email":"[email protected]", "name": ["Boolean", "World"]}' -H 'Content-Type: application/json' https://httpbin.org/post

Dans ce cas, vous pouvez voir apparaître les données sous le json valeur dans la sortie httpbin.org :

Vous pouvez également enregistrer le fichier JSON et le soumettre de la même manière que précédemment :

curl --data @data.json https://httpbin.org/post

Modification de la méthode de requête

Auparavant, nous avons vu comment envoyer des requêtes POST avec cURL. Parfois, vous devrez peut-être envoyer une requête POST sans aucune donnée. Dans ce cas, vous pouvez simplement changer la méthode de requête en POST avec le -X option, comme ceci :

curl -X POST https://httpbin.org/post

Vous pouvez également changer la méthode de requête en autre chose, comme PUT, DELETE ou PATCH. Une exception notable est la méthode HEAD, qui ne peut pas être définie avec le -X option. La méthode HEAD est utilisée pour vérifier si un document est présent sur le serveur, mais sans télécharger le document. Pour utiliser la méthode HEAD, utilisez le -I choix :

curl -I https://www.booleanworld.com/

Lorsque vous effectuez une requête HEAD, cURL affiche tous les en-têtes de requête par défaut. Les serveurs n'envoient aucun contenu lorsqu'ils reçoivent une requête HEAD, il n'y a donc rien après les en-têtes :

Répliquer les requêtes du navigateur avec cURL

Si vous souhaitez répliquer une requête effectuée via votre navigateur via cURL, vous pouvez utiliser les outils de développement Chrome, Firefox et Safari pour obtenir une commande cURL pour le faire.

Les étapes impliquées sont les mêmes pour toutes les plates-formes et tous les navigateurs :

  • Ouvrir les outils de développement dans Firefox/Chrome (généralement F12 sous Windows/Linux et Cmd+Maj+I sur Mac)
  • Accéder à l'onglet réseau
  • Sélectionnez la demande dans la liste, cliquez dessus avec le bouton droit de la souris et sélectionnez "Copier en tant que cURL"

La commande copiée contient tous les en-têtes, méthodes de requête, cookies, etc. nécessaires pour répliquer exactement la même requête. Vous pouvez coller la commande dans votre terminal pour l'exécuter.

Faire échouer cURL sur les erreurs HTTP

Fait intéressant, cURL ne fait pas la différence entre une requête HTTP réussie (2xx) et une requête HTTP échouée (4xx/5xx). Ainsi, il renvoie toujours un statut de sortie de 0 tant qu'il n'y a pas eu de problème de connexion au site. Cela rend difficile l'écriture de scripts shell car il n'y a aucun moyen de vérifier si le fichier a pu être téléchargé avec succès.

Vous pouvez le vérifier en faisant une demande manuellement :

curl https://www.booleanworld.com/404 -sSo file.txt

Vous pouvez voir que curl n'affiche aucune erreur et que le statut de sortie est également nul :

Si vous souhaitez également prendre en compte ces erreurs HTTP, vous pouvez utiliser le -f option, comme ceci :

curl https://www.booleanworld.com/404 -fsSo file.txt

Maintenant, vous pouvez voir que cURL imprime une erreur et définit également le code d'état sur 22 pour informer qu'une erreur s'est produite :

Faire des requêtes authentifiées avec cURL

Certaines pages Web et API nécessitent une authentification avec un nom d'utilisateur et un mot de passe. Il y a deux façons de faire ça. Vous pouvez mentionner le nom d'utilisateur et le mot de passe avec le -u choix :

curl -u boolean:world https://example.com/

Alternativement, vous pouvez simplement l'ajouter à l'URL elle-même, avec le <username>:<password>@<host> syntaxe, comme indiqué :

curl https://boolean:[email protected]/

Dans ces deux méthodes, curl effectue une authentification "de base" avec le serveur.

Tester la prise en charge du protocole avec cURL

En raison de la large gamme de protocoles pris en charge par cURL, vous pouvez même l'utiliser pour tester la prise en charge des protocoles. Si vous souhaitez vérifier si un site prend en charge une certaine version de SSL, vous pouvez utiliser le --sslv<version> ou --tlsv<version> drapeaux. Par exemple, si vous souhaitez vérifier si un site prend en charge TLS v1.2, vous pouvez utiliser :

curl -v --tlsv1.2 https://www.booleanworld.com/

La requête se déroule normalement, ce qui signifie que le site supporte TLSv1.2. Vérifions maintenant si le site prend en charge SSL v3 :

curl -v --sslv3 https://www.booleanworld.com/

Cette commande lance un handshake_failed erreur, car le serveur ne prend pas en charge cette version de SSL.

Veuillez noter que, selon votre système et la version/configuration de la bibliothèque, certaines de ces options de version peuvent ne pas fonctionner. La sortie ci-dessus a été tirée du cURL d'Ubuntu 16.04. Cependant, si vous essayez ceci avec cURL dans MacOS 10.14, cela donne une erreur :

Vous pouvez également tester les versions du protocole HTTP de la même manière, en utilisant les drapeaux --http1.0 , --http1.1 ou --http2 .

Définition de l'en-tête Host et du --resolve de cURL possibilité

Auparavant, nous avons discuté de la façon dont un serveur Web choisit de servir différents sites Web aux visiteurs en fonction de l'en-tête "Hôte". Cela peut être très utile pour vérifier si votre site Web dispose d'un hébergement virtuel correctement configuré, en modifiant l'en-tête "Hôte". Par exemple, supposons que vous ayez un serveur local au 192.168.0.1 avec deux sites Web configurés, à savoir example1.com et example2.com . Maintenant, vous pouvez tester si tout est correctement configuré en définissant l'en-tête Host et en vérifiant si le contenu correct est servi :

curl -H 'Host: example1.com' https://192.168.0.1/
curl -H 'Host: example1.com' https://192.168.0.1/

Malheureusement, cela ne fonctionne pas très bien pour les sites Web utilisant HTTPS. Un seul site Web peut être configuré pour servir plusieurs sites Web, chaque site Web utilisant son propre certificat SSL/TLS. Étant donné que SSL/TLS se déroule à un niveau inférieur à HTTP, cela signifie que des clients tels que cURL doivent indiquer au serveur à quel site Web nous essayons d'accéder au niveau SSL/TLS, afin que le serveur puisse choisir le bon certificat. Par défaut, cURL le dit toujours au serveur.

Cependant, si vous souhaitez envoyer une requête à une adresse IP spécifique comme dans l'exemple ci-dessus, le serveur peut choisir un mauvais certificat, ce qui entraînera l'échec de la vérification SSL/TLS. Le Host l'en-tête ne fonctionne qu'au niveau HTTP et non au niveau SSL/TLS.

Pour éviter le problème décrit ci-dessus, vous pouvez utiliser le --resolve drapeau. L'indicateur de résolution enverra la requête au port et à l'adresse IP de votre choix, mais enverra correctement le nom du site Web aux niveaux SSL/TLS et HTTP.

Reprenons l'exemple précédent. Si vous utilisiez HTTPS et vouliez l'envoyer au serveur local 192.168.0.1 , vous pouvez utiliser :

curl https://example1.com/ --resolve example1.com:192.168.0.1:443

Cela fonctionne également bien pour HTTP. Supposons que si votre serveur HTTP servait sur le port 8080, vous pouvez utiliser soit le --resolve marquer ou définir l'en-tête de l'hôte et le port manuellement, comme ceci :

curl https://192.168.0.1:8080/ -H 'Host: example1.com:8080'
curl https://example.com/ --resolve example1.com:192.168.0.1:8080

Les deux commandes mentionnées ci-dessus sont équivalentes.

Résoudre les domaines en adresses IPv4 et IPv6

Parfois, vous voudrez peut-être vérifier si un site est accessible à la fois sur IPv4 ou IPv6. Vous pouvez forcer cURL à se connecter à la version IPv4 ou IPv6 de votre site en utilisant le -4 ou -6 drapeaux.

N'oubliez pas qu'un site Web n'est accessible via IPv4 et IPv6 que si :

  • Il existe des enregistrements DNS appropriés pour le site Web qui le relie aux adresses IPv4 et IPv6.
  • Vous disposez d'une connectivité IPv4 et IPv6 sur votre système.

Par exemple, si vous souhaitez vérifier si vous pouvez accéder au site Web icanhazip.com via IPv6, vous pouvez utiliser :

curl -6 https://icanhazip.com/

Si le site est accessible via HTTPS, vous devez obtenir votre propre adresse IPv6 dans la sortie. Ce site Web renvoie l'adresse IP publique de tout client qui s'y connecte. Ainsi, selon le protocole utilisé, il affiche une adresse IPv4 ou IPv6.

Vous pouvez également utiliser le -v option avec -4 et -6 pour obtenir plus de détails.

Désactivation des vérifications de certificat de cURL

Par défaut, cURL vérifie les certificats lorsqu'il se connecte via HTTPS. Cependant, il est souvent utile de désactiver la vérification des certificats lorsque vous essayez d'effectuer des requêtes vers des sites utilisant des certificats auto-signés ou si vous devez tester un site dont le certificat est mal configuré.

Pour désactiver les vérifications de certificat, utilisez le -k certificat. Nous testerons cela en envoyant une demande à expired.badssl.com, qui est un site Web utilisant un certificat SSL expiré.

curl -k https://expired.badssl.com/

Avec le -k option, les vérifications de certificat sont ignorées. Ainsi, cURL télécharge la page et affiche le corps de la requête avec succès. Par contre, si vous n'avez pas utilisé le -k option, vous obtiendrez une erreur, semblable à celle ci-dessous :

Résoudre les problèmes de site Web avec la "panne temporelle cURL"

Vous pouvez rencontrer des situations où un site Web est très lent pour vous et vous souhaitez approfondir le problème. Vous pouvez faire en sorte que cURL affiche les détails de la requête, tels que le temps nécessaire à la résolution DNS, l'établissement d'une connexion, etc. avec le -w option. Ceci est souvent appelé "répartition temporelle" cURL.

Par exemple, si vous souhaitez voir ces détails pour vous connecter au https://www.booleanworld.com/ , exécutez :

curl https://www.booleanworld.com/ -sSo /dev/null -w 'namelookup:t%{time_namelookup}nconnect:t%{time_connect}nappconnect:t%{time_appconnect}npretransfer:t%{time_pretransfer}nredirect:t%{time_redirect}nstarttransfer:t%{time_starttransfer}ntotal:tt%{time_total}n'

(Si vous l'exécutez à partir d'un système Windows, modifiez le /dev/null à NUL ).

Vous obtiendrez une sortie similaire à celle-ci :

Chacune de ces valeurs est exprimée en secondes, et voici ce que chaque valeur représente :

  • recherche de nom — Le temps requis pour la résolution DNS.
  • se connecter — Le temps nécessaire pour établir la connexion TCP.
  • appconnect — Il s'agit du temps nécessaire pour établir des connexions pour toutes les couches entre TCP et la couche application, telles que SSL/TLS. Dans notre cas, la couche application est HTTP. De plus, s'il n'y a pas une telle couche intermédiaire (comme lorsqu'il y a une requête HTTP directe), ce temps sera toujours 0.
  • prétransfert — Il s'agit du temps écoulé entre le début et le moment où le transfert du fichier est sur le point de commencer.
  • redirection — Il s'agit du temps total nécessaire pour traiter les redirections.
  • démarrer le transfert — Temps écoulé entre le début et le moment où le premier octet est sur le point d'être transféré.
  • totale - Le temps total nécessaire à cURL pour terminer l'ensemble du processus.

Par exemple, disons que vous rencontrez des retards de connexion à un site Web et que vous remarquez que la valeur "namelookup" était trop élevée. Comme cela indique un problème avec le serveur DNS de votre FAI, vous pouvez commencer à chercher pourquoi la recherche DNS est si lente et passer à un autre serveur DNS si nécessaire.

fichiers de configuration cURL

Parfois, vous voudrez peut-être que toutes les requêtes cURL utilisent les mêmes options. Passer ces options à la main n'est pas une solution réalisable, donc cURL vous permet de spécifier des options dans un fichier de configuration.

Le fichier de configuration par défaut se trouve dans ~/.curlrc sous Linux/MacOS et %appdata%_curlrc dans Windows. Dans ce fichier, vous pouvez spécifier toutes les options dont vous avez besoin, telles que :

# Always use IPv4
-4
# Always show verbose output
-v
# When following a redirect, automatically set the previous URL as referer.
referer = ";auto"
# Wait 60 seconds before timing out.
connect-timeout = 60

Après avoir créé le fichier ci-dessus, essayez de faire une demande avec curl example.com . Vous constaterez que ces options ont pris effet.

Si vous souhaitez utiliser un fichier de configuration personnalisé au lieu de celui par défaut, vous pouvez utiliser -K option pour pointer curl vers votre fichier de configuration. Par exemple, si vous avez un fichier de configuration nommé config.txt , vous pouvez l'utiliser avec :

curl -K config.txt example.com

Conclusion

Dans cet article, nous avons couvert les utilisations les plus courantes de la commande cURL. Bien sûr, cet article ne fait qu'effleurer la surface et cURL peut faire beaucoup d'autres choses. Vous pouvez taper man curl dans votre terminal ou visitez simplement cette page pour voir la page de manuel qui répertorie toutes les options.


Cent OS
  1. Tutoriel de commande Linux Ping avec exemples

  2. Tutoriel Tmux :comment installer et utiliser des exemples de commandes

  3. La commande Linux curl expliquée avec des exemples

  4. Commande Nohup avec exemples

  5. Tutoriel vim avec des exemples de commandes

15 Commande Linux ps avec exemples

Tutoriel Youtube-dl avec des exemples pour les débutants

Le didacticiel de commande fc avec des exemples pour les débutants

Commande IP Linux avec exemples

Commande d'historique avec exemples

Tutoriel sur la commande de recherche Linux (avec exemples)