3 Punkte von GN⁺ 2024-01-30 | 1 Kommentare | Auf WhatsApp teilen

Verwendung von --libcurl

  • Empfehlung zur Nutzung von libcurl: Nutzern wird empfohlen, zunächst das curl-Kommandozeilenwerkzeug zu verwenden, um die gewünschte Übertragung auszuprobieren. Wenn sie ungefähr wie gewünscht funktioniert, sollten sie den Schalter --libcurl [Dateiname] zur Kommandozeile hinzufügen und den Befehl erneut ausführen.
  • Code-Generierung: Die Kommandozeilenoption --libcurl erzeugt mit dem angegebenen Dateinamen ein C-Programm. Dieses C-Programm verwendet libcurl, um die Übertragung auszuführen, die das curl-Kommandozeilenwerkzeug durchgeführt hat.
  • Ausnahmen und Unterschiede: Es ist nicht immer zu 100 % identisch, kann aber eine hervorragende Inspiration für die gewünschten libcurl-Optionen und zusätzlichen Argumente liefern.

Beispielcode

  • Ausführungsbeispiel: Wenn der Befehl curl http://example.com --libcurl example.c ausgeführt wird, wird im aktuellen Verzeichnis die Datei example.c erzeugt.
  • Generierter Code: Der erzeugte Code enthält verschiedene Optionseinstellungen mit curl_easy_setopt(). Einige Optionen lassen sich nicht leicht direkt aus dem Quelltext erzeugen, sodass Nutzer sie selbst implementieren oder möglicherweise nicht verwenden.

Meinung von GN⁺

  • Nützlichkeit von libcurl: Diese Funktion ermöglicht es Entwicklern, einen auf der Kommandozeile funktionierenden curl-Befehl einfach in ein C-Programm umzuwandeln und so die Entwicklung von Anwendungen mit libcurl zu beschleunigen.
  • Vorteile der Code-Generierung: Der automatisch erzeugte Code kann Entwicklern helfen, die libcurl-API schneller zu verstehen und anzuwenden.
  • Wert als Lernwerkzeug: Für angehende Softwareentwickler kann dies ein gutes Lernmaterial sein, das libcurl-Optionen und praktische Anwendungsfälle der Netzwerkprogrammierung zeigt.

1 Kommentare

 
GN⁺ 2024-01-30
Hacker-News-Kommentare
  • Es ist ein sehr gutes Muster, in den Netzwerk-Tab der Browser-Entwicklertools zu gehen, die gewünschte Anfrage zu finden, sie mit „copy as curl“ zu kopieren und dann mit einem Tool wie https://curlconverter.com/ in Anfrage-Code für die verwendete Sprache umzuwandeln
    In gewisser Weise wird curl dabei wie eine Zwischendarstellung verwendet, die sich in alles Mögliche übersetzen lässt

    • R-Nutzer können mit der Funktion curl_translate aus dem kürzlich neu geschriebenen httr2-Paket den Befehl „copy as curl“ in Anfrage-Code umwandeln
      https://httr2.r-lib.org/reference/curl_translate.html
    • curlconverter.com wirkt so gut, dass man es direkt als Lesezeichen speichern möchte
      „copy as curl“ im Browser übernimmt Authentifizierungs- und Encoding-Header in einem sicher funktionierenden Zustand und ist viel bequemer, als selbst an einem mehrzeiligen curl-Befehl herumzubasteln
    • Das Debuggen von API-Endpunkten ist dadurch viel einfacher geworden
      Man kann Anfrageparameter ändern und sie an eine lokale Instanz schicken oder die Ausgabe mit jq per Pipe nachbearbeiten
    • Wenn ein Endpunkt nicht funktioniert, ist der erste Schritt oft wirklich: „Geht es mit curl?
    • HTTP selbst braucht zwar keine Zwischendarstellung, aber wegen der Allgegenwärtigkeit von cURL funktioniert es de facto so
      Es ist so weit verbreitet, dass es Tools gibt, die Anfragen als cURL exportieren, und andere, die cURL importieren
  • Es ist ziemlich cool, dass eine Kommandozeilenschnittstelle ein Flag hat, das den Programmquellcode ausgibt, der dasselbe tut wie der aktuelle Befehl
    Es fühlt sich an, als würde man die Motorhaube öffnen und sehen, was intern passiert. Das hilft nicht nur, das Verhalten besser zu verstehen, sondern macht es auch leichter, es an eigene Bedürfnisse anzupassen oder zu erweitern

    • Auch als Dokumentation für Programmbibliotheken ist das hervorragend
      Wenn man libcurl verwendet und etwa Range Requests braucht oder im Browser-Netzwerk-Tab „copy as curl“ gemacht hat, kann man den Befehl auf der Kommandozeile ausführen und einfach --libcurl anhängen, um genau zu sehen, wie es mit der C-Bibliothek geht
    • Es wäre schön, wenn so etwas auch für Gnome-Einstellungen, Netzwerkeinstellungen, Firewall-GUIs und alles andere gelten würde, das sich auch per CLI-Befehl ausführen lässt
  • So etwas war einer der Gründe für den Erfolg von Visual-Basic-Makros in Microsoft Office
    Man konnte in Word oder Excel eine Aktion ausführen, sich das erzeugte Makro ansehen und den Code dann an die eigenen Bedürfnisse anpassen. Ein simples, aber mächtiges Konzept, und schön, es auch bei curl zu sehen

    • Microsoft hat ebenfalls ein ähnlich nützliches Tool gebaut, mit dem man die Struktur bestimmter Office-Dokumente untersuchen und den C#-Code sehen kann, der ihre Bestandteile erzeugt
      Es scheint allerdings schon länger nicht mehr aktualisiert worden zu sein: https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5
    • Dafür scheint es ein verallgemeinerbares Muster zu geben
      Das erinnert auch an AREXX auf dem Amiga
    • Das erinnert auch an das parallele XAML/UI-Modell auf der Excel-Seite, das man im WPF-Editor von Visual Studio gesehen hat
  • Zum Kompilieren muss man das Linken mit libcurl angeben, etwa durch -lcurl bei gcc
    Zum Beispiel kann man mit curl https://ifconfig.me --libcurl ip_fetcher.c die IP-Adresse und ip_fetcher.c erzeugen, dann mit gcc -o ip_fetcher ip_fetcher.c -lcurl kompilieren und anschließend ./ip_fetcher ausführen, woraufhin die IP-Adresse ausgegeben wird
    Für Leute, die nicht täglich C-Code schreiben, ist selbst dieser grundlegende Link-Schritt nützliche Information

    • Wenn make angenehmer ist als direkt cc einzugeben, geht es auch noch einfacher
      Nach curl https://ifconfig.me --libcurl ip_fetcher.c einfach make LDFLAGS=-lcurl ip_fetcher und dann ./ip_fetcher ausführen
  • Kleine Eigenwerbung: Hurl ist ein Open-Source-CLI, das mit libcurl HTTP-Anfragen in Klartext ausführt und testet
    Es nutzt die hohe Zuverlässigkeit von libcurl und Funktionen wie HTTP/3 und ergänzt Dinge wie das Verketten von Anfragen, das Erfassen von Daten aus Antworten und deren Weitergabe an die nächste Anfrage sowie Antworttests mit JSONPath und XPath
    Es gibt auch syntaktischen Zucker für REST-/SOAP-/GraphQL-API-Anfragen, aber im Kern ist es einfach libcurl, und mit der verbose-Option kann man sogar curl-Befehle per grep durchsuchen. Ich bin als Maintainer beteiligt
    https://hurl.dev

  • Es wäre schön, wenn ffmpeg so etwas auch könnte

  • Daniel Stenberg achtet wirklich extrem sorgfältig auf Details sowie auf die Entwickler- und Nutzererfahrung
    Dieses Maß an Feinschliff ist erstaunlich

  • Ich meine mich zu erinnern, dass Daniel Stenberg diese Option in einem dreistündigen Video erwähnt hat, in dem er die meisten curl-Kommandozeilenoptionen durchgeht
    https://www.youtube.com/watch?v=V5vZWHP-RqU

  • Der Einsendetitel sollte nicht die Kombination aus Geviertstrich und Bindestrich (—-) sein, sondern zwei Bindestriche (--)

    • Wenn man dem Betreiber über den Contact-Link im Footer eine E-Mail schickt, kann er das sehen und korrigieren
  • Bedeutet diese Option ursprünglich, dass sie ein kompilierbares C-Programm erzeugt, das ein Script ersetzen kann, das einen curl-Aufruf kapselt?

    • Ja. Mit libcurl war das schon immer möglich, aber bisher musste man den Boilerplate-Code selbst schreiben
    • Die Idee ist, dass man den erzeugten C-Code in ein bestehendes Programm kopieren oder ihn zumindest als Referenz nutzen kann, um zu sehen, welche libcurl-API-Aufrufe nötig sind, um genau diesen curl-Aufruf nachzubilden
    • Um für gewöhnliche Webseiten und Ähnliches wirklich nützlich zu sein, muss man wahrscheinlich noch ein paar Parameter anpassen
      Man sollte es eher als Ausgangspunkt sehen, der einem einige Stunden Dokumentationssuche erspart