La bibliothèque « libcurl »
(everything.curl.dev)Utiliser --libcurl
- Utilisation recommandée de libcurl : il est recommandé aux utilisateurs d’essayer d’abord le transfert souhaité avec l’outil en ligne de commande curl, puis, une fois qu’il fonctionne à peu près comme voulu, de relancer la commande en ajoutant l’option
--libcurl [nom_du_fichier]. - Génération de code : l’option de ligne de commande
--libcurlgénère un programme C avec le nom de fichier fourni. Ce programme C utilise libcurl pour exécuter le transfert effectué par l’outil en ligne de commande curl. - Exceptions et différences : le résultat ne correspond pas toujours à 100 %, mais cela peut fournir une excellente source d’inspiration concernant les options libcurl et les arguments supplémentaires à utiliser.
Exemple de code
- Exemple d’exécution : si vous exécutez la commande
curl http://example.com --libcurl example.c, le fichierexample.cest créé dans le répertoire courant. - Code généré : le code généré inclut divers réglages d’options via
curl_easy_setopt(), et certaines options ne peuvent pas être générées facilement depuis la source ; l’utilisateur peut donc devoir les implémenter lui-même ou choisir de ne pas les utiliser.
Avis de GN⁺
- Utilité de libcurl : cette fonctionnalité permet aux développeurs de convertir facilement en programme C une commande curl fonctionnelle en ligne de commande, ce qui accélère le développement d’applications utilisant libcurl.
- Avantage de la génération de code : le code généré automatiquement peut aider les développeurs à comprendre et appliquer plus rapidement l’API de libcurl.
- Valeur comme outil d’apprentissage : cela peut constituer un bon support d’apprentissage pour les ingénieurs logiciel débutants, en montrant des exemples concrets d’utilisation des options de libcurl et de programmation réseau.
1 commentaires
Commentaires Hacker News
Le schéma qui consiste à trouver la requête voulue dans l’onglet Réseau des outils de développement du navigateur, à la copier via « copy as curl », puis à la convertir avec un outil comme https://curlconverter.com/ en code de requête pour le langage qu’on utilise est vraiment excellent.
D’une certaine manière, curl sert de représentation intermédiaire traduisible vers à peu près n’importe quoi.
curl_translatedu package httr2, une réécriture récente de httr.https://httr2.r-lib.org/reference/curl_translate.html
Le « copy as curl » du navigateur récupère l’authentification et les en-têtes d’encodage dans un état qui fonctionne à coup sûr, ce qui est bien plus pratique que de bricoler soi-même une commande curl sur plusieurs lignes.
On peut modifier les paramètres de requête pour l’envoyer à une instance locale, ou la passer à
jqvia un pipe afin de mettre en forme la sortie.Comme il est extrêmement répandu, des outils exportent les requêtes en cURL, et d’autres importent du cURL.
C’est assez génial qu’une interface en ligne de commande dispose d’un flag qui crache le code source d’un programme faisant la même chose que la commande courante.
On a l’impression d’ouvrir le capot pour voir ce qui se passe à l’intérieur ; non seulement cela aide à mieux comprendre le fonctionnement, mais cela facilite aussi l’adaptation ou l’extension selon ses besoins.
Si, en utilisant
libcurl, on se rend compte qu’on a besoin de quelque chose comme des requêtes par plage, ou si l’on a fait « copy as curl » dans l’onglet Réseau du navigateur, il suffit d’exécuter la commande puis d’ajouter--libcurlpour voir exactement comment faire avec la bibliothèque C.Cette approche a été l’une des raisons du succès des macros Visual Basic de Microsoft Office.
On pouvait effectuer une action dans Word ou Excel, regarder la macro générée, puis modifier le code selon ses besoins. C’est un concept simple mais puissant, et c’est agréable de le voir aussi dans curl.
Il ne semble pas avoir été mis à jour depuis longtemps : https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5
AREXX sur Amiga me vient aussi à l’esprit.
Pour compiler, il faut indiquer à
gccde faire le lien avec libcurl, par exemple en ajoutant-lcurl.Par exemple, on crée l’adresse IP et
ip_fetcher.caveccurl https://ifconfig.me --libcurl ip_fetcher.c, puis on compile avecgcc -o ip_fetcher ip_fetcher.c -lcurl, et en exécutant./ip_fetcher, l’adresse IP s’affiche.Pour quelqu’un qui n’écrit pas du C tous les jours, cette étape de linkage de base est aussi une information utile.
makeplutôt que de taper directement une commandecc, il existe une méthode encore plus simple.Après
curl https://ifconfig.me --libcurl ip_fetcher.c, il suffit de lancermake LDFLAGS=-lcurl ip_fetcher, puis./ip_fetcher.Pour faire un peu de promotion, Hurl est une CLI open source qui utilise libcurl pour exécuter et tester des requêtes HTTP en texte brut.
Elle s’appuie sur la grande fiabilité de libcurl et sur des fonctionnalités comme HTTP/3, tout en ajoutant l’enchaînement des requêtes, la capture de données dans les réponses pour les transmettre à la requête suivante, ainsi que des tests de réponses avec JSONPath ou XPath.
Il y a aussi du sucre syntaxique pour les requêtes d’API REST/SOAP/GraphQL, mais le cœur reste simplement libcurl ; avec l’option verbose, on peut aussi grepper la commande curl. J’y participe comme mainteneur.
https://hurl.dev
Ce serait bien que ce genre de fonctionnalité soit aussi possible avec ffmpeg.
Daniel Stenberg apporte vraiment un soin minutieux aux détails ainsi qu’à l’expérience développeur et utilisateur.
Un tel niveau de finition est impressionnant.
Il me semble que Daniel Stenberg lui-même avait mentionné cette option dans une vidéo de 3 heures où il passe en revue la plupart des options de ligne de commande de curl.
https://www.youtube.com/watch?v=V5vZWHP-RqU
Le titre soumis devrait contenir deux traits d’union (
--), et non une combinaison tiret cadratin pleine chasse + trait d’union (—-).Est-ce que cette option signifie qu’elle génère un programme C compilable capable de remplacer un script qui enveloppe l’appel curl d’origine ?
libcurl, mais jusqu’ici il fallait écrire soi-même le code boilerplate.Il vaut mieux le voir comme un point de départ qui évite de passer des heures à fouiller la documentation.