GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

cURL-Befehls-Tutorial mit Beispielen

cURL ist ein Befehlszeilentool und eine Bibliothek, die zum Empfangen und Senden von Daten zwischen einem Client und einem Server oder zwei beliebigen Computern, die über das Internet verbunden sind, verwendet werden kann. Es unterstützt eine Vielzahl von Protokollen wie HTTP, FTP, IMAP, LDAP, POP3, SMTP und viele mehr.

Aufgrund seiner Vielseitigkeit wird cURL in vielen Anwendungen und für viele Anwendungsfälle verwendet. Beispielsweise kann das Befehlszeilentool zum Herunterladen von Dateien, zum Testen von APIs und zum Debuggen von Netzwerkproblemen verwendet werden. In diesem Artikel werden wir uns ansehen, wie Sie das cURL-Befehlszeilentool verwenden können, um verschiedene Aufgaben auszuführen.

Inhalt

  • 1 cURL installieren

    • 1.1 Linux
    • 1.2 MacOS
    • 1.3 Windows
  • 2 Grundlegende Verwendung von cURL
  • 3 Dateien mit cURL herunterladen
  • 4 Aufbau einer HTTP-Anfrage/Antwort
  • 5 Weiterleitungen mit cURL folgen
  • 6 Antwortheader mit cURL anzeigen
  • 7 Anforderungsheader und Verbindungsdetails anzeigen
  • 8 Silencing-Fehler
  • 9 Setzen von HTTP-Request-Headern mit cURL
  • 10 POST-Anfragen mit cURL stellen
  • 11 Senden von JSON-Daten mit cURL
  • 12 Ändern der Anfragemethode
  • 13 Browseranfragen mit cURL replizieren
  • 14 cURL bei HTTP-Fehlern fehlschlagen lassen
  • 15 Authentifizierte Anfragen mit cURL stellen
  • 16 Testprotokollunterstützung mit cURL
  • 17 Festlegen des Host-Headers und der Option –resolve von cURL
  • 18 Domänen in IPv4- und IPv6-Adressen auflösen
  • 19 Zertifikatsprüfungen von cURL deaktivieren
  • 20 Fehlerbehebung bei Website-Problemen mit „cURL-Timing-Aufschlüsselung“
  • 21 cURL-Konfigurationsdateien
  • 22 Fazit

cURL installieren

Linux

Bei den meisten Linux-Distributionen ist cURL standardmäßig installiert. Um zu überprüfen, ob es auf Ihrem System installiert ist oder nicht, geben Sie curl ein in Ihrem Terminalfenster und drücken Sie die Eingabetaste. Wenn es nicht installiert ist, wird der Fehler „Befehl nicht gefunden“ angezeigt. Verwenden Sie die folgenden Befehle, um es auf Ihrem System zu installieren.

Verwenden Sie für Ubuntu/Debian-basierte Systeme:

sudo apt update
sudo apt install curl

Verwenden Sie für CentOS/RHEL-Systeme:

sudo yum install curl

Andererseits können Sie für Fedora-Systeme den Befehl verwenden:

sudo dnf install curl

MacOS

MacOS wird mit vorinstalliertem cURL geliefert und erhält Updates, wenn Apple Updates für das Betriebssystem veröffentlicht. Falls Sie jedoch die neueste Version von cURL installieren möchten, können Sie curl installieren Homebrew-Paket. Sobald Sie Homebrew installiert haben, können Sie es installieren mit:

brew install curl

Windows

Für Windows 10 Version 1803 und höher wird cURL jetzt standardmäßig in der Eingabeaufforderung ausgeliefert, sodass Sie es direkt von dort aus verwenden können. Für ältere Versionen von Windows enthält das cURL-Projekt Windows-Binärdateien. Nachdem Sie die ZIP-Datei heruntergeladen und entpackt haben, finden Sie einen Ordner mit dem Namen curl-<version number>-mingw . Verschieben Sie diesen Ordner in ein Verzeichnis Ihrer Wahl. In diesem Artikel gehen wir davon aus, dass unser Ordner curl-7.62.0-win64-mingw heißt , und wir haben es unter C: verschoben .

Als Nächstes sollten Sie cURL bin hinzufügen Verzeichnis in das Windows PATH Umgebungsvariable, damit Windows sie finden kann, wenn Sie curl eingeben in der Eingabeaufforderung. Damit dies funktioniert, müssen Sie die folgenden Schritte ausführen:

  • Öffnen Sie das Dialogfeld „Erweiterte Systemeigenschaften“, indem Sie systempropertiesadvanced ausführen aus dem Windows-Dialogfeld „Ausführen“ (Windows-Taste + R).
  • Klicken Sie auf die Schaltfläche "Umgebungsvariablen".
  • Doppelklicken Sie im Bereich „Systemvariablen“ auf „Pfad“ und fügen Sie den Pfad C:curl-7.62.0-win64-mingwbin hinzu . Bei Windows 10 können Sie dies mit der Schaltfläche „Neu“ auf der rechten Seite tun. Bei älteren Windows-Versionen können Sie ;C:curl-7.62.0-win64-mingwbin eingeben (beachten Sie das Semikolon am Anfang) am Ende des Textfelds „Wert“.

Sobald Sie die obigen Schritte abgeschlossen haben, können Sie curl eingeben um zu prüfen, ob das funktioniert. Wenn alles gut gelaufen ist, sollten Sie die folgende Ausgabe sehen:

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

Grundlegende Verwendung von cURL

Die grundlegende Syntax für die Verwendung von cURL ist einfach:

curl <url>

Dadurch wird der unter der angegebenen URL verfügbare Inhalt abgerufen und auf dem Terminal gedruckt. Wenn Sie beispielsweise curl example.com ausführen , sollten Sie die HTML-Seite gedruckt sehen können, wie unten gezeigt:

Dies ist die grundlegendste Operation, die cURL ausführen kann. In den nächsten Abschnitten werden wir uns die verschiedenen Befehlszeilenoptionen ansehen, die von cURL akzeptiert werden.



Dateien mit cURL herunterladen

Wie wir gesehen haben, lädt cURL den URL-Inhalt direkt herunter und gibt ihn auf dem Terminal aus. Wenn Sie die Ausgabe jedoch als Datei speichern möchten, können Sie mit dem -o einen Dateinamen angeben Option, etwa so:

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

Zusätzlich zum Speichern der Inhalte schaltet cURL auf die Anzeige eines netten Fortschrittsbalkens mit Download-Statistiken um, wie z. B. die Geschwindigkeit und die benötigte Zeit:

Anstatt manuell einen Dateinamen anzugeben, können Sie cURL den Dateinamen mit dem -O herausfinden lassen Möglichkeit. Wenn Sie also die obige URL in der Datei vlc-3.0.4.dmg speichern möchten , können Sie einfach verwenden:

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

Denken Sie daran, wenn Sie den -o verwenden oder die -O options und eine gleichnamige Datei existiert, wird cURL diese überschreiben.

Wenn Sie eine teilweise heruntergeladene Datei haben, können Sie den Dateidownload mit dem -C - fortsetzen Option, wie unten gezeigt:

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

Wie bei den meisten anderen Befehlszeilentools können Sie verschiedene Optionen miteinander kombinieren. Im obigen Befehl könnten Sie beispielsweise -O -C - kombinieren und schreiben Sie es als -OC - .

Anatomie einer HTTP-Anfrage/Antwort

Bevor wir uns eingehender mit den von cURL unterstützten Funktionen befassen, werden wir ein wenig über HTTP-Anfragen und -Antworten diskutieren. Wenn Sie mit diesen Konzepten vertraut sind, springen Sie direkt zu den anderen Abschnitten.

Um eine Ressource wie eine Webseite anzufordern oder einige Daten an einen Server zu senden, sendet ein HTTP-Client (wie ein Browser oder cURL) eine HTTP-Anfrage an den Server. Der Server antwortet mit einer HTTP-Antwort, die die Datei „contents ” dieser Seite.

HTTP-Anforderungen enthalten die Anforderungsmethode, die URL, einige Header und einige optionale Daten als Teil des „Anforderungstexts“. Die Anfragemethode steuert, wie eine bestimmte Anfrage verarbeitet werden soll. Die gebräuchlichsten Arten von Anfragemethoden sind „GET“ und „POST“. Normalerweise verwenden wir „GET“-Anforderungen, um eine Ressource vom Server abzurufen, und „POST“, um Daten zur Verarbeitung an den Server zu senden. „POST“-Anfragen enthalten normalerweise einige Daten im Anfragetext, die der Server verwenden kann.

HTTP-Antworten sind ähnlich und enthalten den Statuscode, einige Header und einen Body. Der Hauptteil enthält die eigentlichen Daten, die Clients anzeigen oder in einer Datei speichern können. Der Statuscode ist ein 3-stelliger Code, der dem Client mitteilt, ob die Anfrage erfolgreich war oder fehlgeschlagen ist und wie weiter vorgegangen werden soll. Übliche Statuscodes sind 2xx (Erfolg), 3xx (Umleitung auf eine andere Seite) und 4xx/5xx (für Fehler).

HTTP ist ein „Anwendungsschichtprotokoll“ und läuft über ein anderes Protokoll namens TCP. Es kümmert sich um die erneute Übertragung verlorener Daten und stellt sicher, dass der Client und der Server Daten mit einer optimalen Rate übertragen. Wenn Sie HTTPS verwenden, läuft ein anderes Protokoll namens SSL/TLS zwischen TCP und HTTP, um die Daten zu sichern.

Am häufigsten verwenden wir Domainnamen wie google.com um auf Webseiten zuzugreifen. Die Zuordnung des Domänennamens zu einer IP-Adresse erfolgt über ein anderes Protokoll namens DNS.



Sie sollten jetzt über genügend Hintergrundwissen verfügen, um den Rest dieses Artikels zu verstehen.

Umleitungen mit cURL folgen

Wenn cURL nach einer Anfrage eine Weiterleitung erhält, stellt es standardmäßig nicht automatisch eine Anfrage an die neue URL. Betrachten Sie als Beispiel die URL https://www.facebook.com . Wenn Sie über diese URL eine Anfrage stellen, sendet der Server eine HTTP-3XX-Umleitung an https://www.facebook.com/ . Ansonsten ist der Antworttext jedoch leer. Wenn Sie dies also ausprobieren, erhalten Sie eine leere Ausgabe:

Wenn Sie möchten, dass cURL diesen Weiterleitungen folgt, sollten Sie den -L verwenden Möglichkeit. Wenn Sie dies wiederholen, fordern Sie https://www.facebook.com/ an mit dem -L Flagge, etwa so:

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

Jetzt können Sie den HTML-Inhalt der Seite sehen, ähnlich wie im folgenden Screenshot. Im nächsten Abschnitt werden wir sehen, wie wir überprüfen können, ob es eine HTTP 3XX-Weiterleitung gibt.

Bitte beachten Sie, dass cURL Weiterleitungen nur folgen kann, wenn der Server mit einer „HTTP-Weiterleitung“ geantwortet hat, was bedeutet, dass der Server einen 3XX-Statuscode verwendet hat, und die Kopfzeile „Location“ verwendet hat, um die neue URL anzugeben. cURL kann keine Javascript- oder HTML-basierten Umleitungsmethoden oder den „Refresh-Header“ verarbeiten.

Bei einer Weiterleitungskette wird der -L Option folgt den Weiterleitungen nur bis zu 500 Mal. Mit --max-redirs können Sie die Anzahl der maximal folgenden Weiterleitungen steuern Flagge.

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

Wenn Sie dieses Flag auf -1 setzen , wird es den Weiterleitungen endlos folgen.

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

Antwortheader mit cURL anzeigen

Beim Debuggen von Problemen mit einer Website möchten Sie möglicherweise die vom Server gesendeten HTTP-Antwortheader anzeigen. Um diese Funktion zu aktivieren, können Sie den -i verwenden Option.

Lassen Sie uns mit unserem vorherigen Beispiel fortfahren und bestätigen, dass es tatsächlich eine HTTP 3XX-Umleitung gibt, wenn Sie eine HTTP-Anfrage an https://www.facebook.com/ stellen , indem Sie Folgendes ausführen:

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

Beachten Sie, dass wir auch -L verwendet haben damit cURL Weiterleitungen folgen kann. Es ist auch möglich, diese beiden Optionen zu kombinieren und sie als -iL zu schreiben oder -Li statt -L -i .

Nachdem Sie den Befehl ausgeführt haben, können Sie die HTTP 3XX-Umleitung sowie die Seite HTTP 200 OK-Antwort sehen, nachdem Sie der Umleitung gefolgt sind:

Wenn Sie den -o verwenden /-O Option in Kombination mit -i , werden die Antwortheader und der Text in einer einzigen Datei gespeichert.

Anfrageheader und Verbindungsdetails anzeigen

Im vorherigen Abschnitt haben wir gesehen, wie Sie HTTP-Antwortheader mit cURL anzeigen können. Manchmal möchten Sie jedoch möglicherweise weitere Details zu einer Anforderung anzeigen, z. B. die gesendeten Anforderungsheader und den Verbindungsprozess. cURL bietet den -v an Flag (genannt „verbose mode“) für diesen Zweck und kann wie folgt verwendet werden:

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

Die Ausgabe enthält Anfragedaten (gekennzeichnet mit > ), Antwortheader (gekennzeichnet mit < ) und weitere Details zur Anfrage, wie die verwendete IP und das SSL-Handshake-Verfahren (gekennzeichnet mit * ). Der Antworttext ist auch unter diesen Informationen verfügbar. (Allerdings ist dies im Screenshot unten nicht sichtbar).

Meistens interessiert uns der Antworttext nicht. Sie können es einfach ausblenden, indem Sie die Ausgabe auf dem Null-Gerät „speichern“, das /dev/null ist unter Linux und MacOS und NUL unter Windows:

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

Stummschaltung von Fehlern

Zuvor haben wir gesehen, dass cURL einen Fortschrittsbalken anzeigt, wenn Sie die Ausgabe in einer Datei speichern. Leider ist der Fortschrittsbalken möglicherweise nicht unter allen Umständen nützlich. Zum Beispiel, wenn Sie die Ausgabe mit -vo /dev/null ausblenden , erscheint ein Fortschrittsbalken, der überhaupt nicht nützlich ist.

Sie können all diese zusätzlichen Ausgaben ausblenden, indem Sie den -s verwenden Header. Wenn wir mit unserem vorherigen Beispiel fortfahren, aber den Fortschrittsbalken ausblenden, dann wären die Befehle:

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

Der -s Die Option ist jedoch etwas aggressiv, da sie sogar Fehlermeldungen ausblendet. Wenn Sie für Ihren Anwendungsfall den Fortschrittsbalken ausblenden, aber dennoch alle Fehler anzeigen möchten, können Sie den -S kombinieren Option.

Wenn Sie also versuchen, die cURL-Ausgabe in einer Datei zu speichern, aber einfach nur den Fortschrittsbalken ausblenden möchten, können Sie Folgendes verwenden:

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

HTTP-Request-Header mit cURL setzen

Beim Testen von APIs müssen Sie möglicherweise benutzerdefinierte Header für die HTTP-Anforderung festlegen. cURL hat den -H Option, die Sie zu diesem Zweck verwenden können. Wenn Sie den benutzerdefinierten Header X-My-Custom-Header senden möchten mit dem Wert 123 bis https://httpbin.org/get , sollten Sie Folgendes ausführen:

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

(httpbin.org ist eine sehr nützliche Website, auf der Sie Details der HTTP-Anforderung anzeigen können, die Sie an sie gesendet haben.)

Die von der URL zurückgegebenen Daten zeigen, dass dieser Header tatsächlich gesetzt wurde:

Sie können auch alle von cURL gesendeten Standardheader wie die Header „User-Agent“ oder „Host“ überschreiben. Der HTTP-Client (in unserem Fall cURL) sendet den „User-Agent“-Header, um dem Server den Typ und die Version des verwendeten Clients mitzuteilen. Außerdem verwendet der Client den „Host“-Header, um dem Server mitzuteilen, welche Site er bedienen soll. Dieser Header wird benötigt, da ein Webserver mehrere Websites unter einer einzigen IP-Adresse hosten kann.

Wenn Sie mehrere Header setzen möchten, können Sie auch einfach den -H wiederholen Option nach Bedarf.

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

cURL hat jedoch bestimmte Abkürzungen für häufig verwendete Flags. Den Header „User-Agent“ können Sie mit dem -A setzen Möglichkeit:

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

Der „Referer“-Header wird verwendet, um dem Server den Ort mitzuteilen, von dem aus er von der vorherigen Seite aufgerufen wurde. Es wird normalerweise von Browsern gesendet, wenn Javascript oder Bilder angefordert werden, die mit einer Seite verknüpft sind, oder wenn Weiterleitungen verfolgt werden. Wenn Sie einen „Referer“-Header setzen möchten, können Sie den -e verwenden Flagge:

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

Andernfalls, wenn Sie einer Reihe von Weiterleitungen folgen, können Sie einfach -e ';auto' verwenden und cURL kümmert sich selbst um das Setzen der Weiterleitungen.

POST-Anfragen mit cURL stellen

Standardmäßig sendet cURL GET-Anfragen, aber Sie können es auch verwenden, um POST-Anfragen mit dem -d zu senden oder --data Möglichkeit. Alle Felder müssen als key=value angegeben werden durch das kaufmännische Und getrennte Paare (& ) Charakter. Als Beispiel können Sie eine POST-Anfrage an httpbin.org mit einigen Parametern stellen:

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

Aus der Ausgabe können Sie leicht erkennen, dass wir zwei Parameter gepostet haben (diese erscheinen unter dem „Formular“-Schlüssel):

Beliebige Sonderzeichen wie @ , %= oder Leerzeichen im Wert sollten manuell URL-codiert werden. Wenn Sie also einen Parameter „email“ mit dem Wert „[email protected]“ übermitteln möchten, würden Sie Folgendes verwenden:

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

Alternativ können Sie einfach --data-urlencode verwenden um dies für Sie zu erledigen. Wenn Sie zwei Parameter übermitteln möchten, email und name , so sollten Sie die Option verwenden:

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

Wenn der --data Parameter zu groß ist, um ihn auf dem Terminal einzugeben, können Sie ihn in einer Datei speichern und dann mit @ senden , etwa so:

curl --data @params.txt example.com

Bisher haben wir gesehen, wie Sie POST-Anfragen mit cURL stellen können. Wenn Sie Dateien mit einer POST-Anforderung hochladen möchten, können Sie den -F verwenden („Formular“) Option. Hier übermitteln wir die Datei test.c , unter dem Parameternamen file :

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

Dies zeigt den Inhalt der Datei und zeigt an, dass sie erfolgreich übermittelt wurde:

Senden von JSON-Daten mit cURL

Im vorherigen Abschnitt haben wir gesehen, wie POST-Anforderungen mit cURL gesendet werden können. Sie können JSON-Daten auch mit dem --data übermitteln Möglichkeit. Die meisten Server erwarten jedoch, dass sie eine POST-Anfrage mit Schlüssel-Wert-Paaren erhalten, ähnlich wie die, die wir zuvor besprochen haben. Sie müssen also einen zusätzlichen Header namens „Content-Type:application/json“ hinzufügen, damit der Server versteht, dass er mit JSON-Daten umgeht, und diese entsprechend verarbeitet. Außerdem müssen Sie beim Senden von JSON keine URL-Codierung vornehmen.

Wenn Sie also die folgenden JSON-Daten hatten und eine POST-Anfrage an https://httpbin.org/post stellen möchten:

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

Anschließend können Sie die Daten übermitteln mit:

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

In diesem Fall können Sie die Daten unter dem json sehen Wert in der Ausgabe von httpbin.org:

Sie können die JSON-Datei auch speichern und wie zuvor senden:

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

Anfragemethode ändern

Zuvor haben wir gesehen, wie Sie POST-Anfragen mit cURL senden können. Manchmal müssen Sie möglicherweise eine POST-Anforderung ohne Daten senden. In diesem Fall können Sie die Anfragemethode einfach mit dem -X auf POST ändern Option, etwa so:

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

Sie können die Anforderungsmethode auch beliebig ändern, z. B. PUT, DELETE oder PATCH. Eine bemerkenswerte Ausnahme ist die HEAD-Methode, die nicht mit -X gesetzt werden kann Möglichkeit. Die HEAD-Methode wird verwendet, um zu prüfen, ob ein Dokument auf dem Server vorhanden ist, aber ohne das Dokument herunterzuladen. Um die HEAD-Methode zu verwenden, verwenden Sie den -I Möglichkeit:

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

Wenn Sie eine HEAD-Anfrage stellen, zeigt cURL standardmäßig alle Anfrage-Header an. Server senden keine Inhalte, wenn sie eine HEAD-Anfrage erhalten, also steht nichts nach den Headern:

Browseranfragen mit cURL replizieren

Wenn Sie eine über Ihren Browser gestellte Anfrage über cURL replizieren möchten, können Sie die Chrome-, Firefox- und Safari-Entwicklertools verwenden, um einen entsprechenden cURL-Befehl zu erhalten.

Die erforderlichen Schritte sind für alle Plattformen und Browser gleich:

  • Entwicklertools in Firefox/Chrome öffnen (normalerweise F12 unter Windows/Linux und Cmd+Shift+I auf einem Mac)
  • Gehen Sie zum Netzwerk-Tab
  • Wählen Sie die Anfrage aus der Liste aus, klicken Sie mit der rechten Maustaste darauf und wählen Sie „Als cURL kopieren“

Der kopierte Befehl enthält alle Header, Anforderungsmethoden, Cookies usw., die zum Replizieren derselben Anforderung erforderlich sind. Sie können den Befehl in Ihr Terminal einfügen, um ihn auszuführen.

cURL bei HTTP-Fehlern fehlschlagen lassen

Interessanterweise unterscheidet cURL nicht zwischen einer erfolgreichen HTTP-Anfrage (2xx) und einer fehlgeschlagenen HTTP-Anfrage (4xx/5xx). Es gibt also immer einen Exit-Status von 0 zurück, solange es kein Problem mit der Verbindung zur Site gab. Dies erschwert das Schreiben von Shell-Skripten, da es keine Möglichkeit gibt, zu überprüfen, ob die Datei erfolgreich heruntergeladen werden konnte.

Sie können dies überprüfen, indem Sie manuell eine Anfrage stellen:

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

Sie können sehen, dass curl keine Fehler ausgibt und der Exit-Status ebenfalls null ist:

Wenn Sie auch diese HTTP-Fehler berücksichtigen möchten, können Sie den -f verwenden Option, etwa so:

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

Jetzt können Sie sehen, dass cURL einen Fehler ausgibt und auch den Statuscode auf 22 setzt, um darüber zu informieren, dass ein Fehler aufgetreten ist:

Authentifizierte Anfragen mit cURL stellen

Einige Webseiten und APIs erfordern eine Authentifizierung mit Benutzername und Passwort. Dazu gibt es zwei Möglichkeiten. Sie können den Benutzernamen und das Passwort mit dem -u angeben Möglichkeit:

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

Alternativ können Sie es einfach mit dem <username>:<password>@<host> in die URL selbst einfügen Syntax, wie gezeigt:

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

Bei beiden Methoden führt curl eine „Basis“-Authentifizierung mit dem Server durch.

Protokollunterstützung mit cURL testen

Aufgrund der großen Auswahl an Protokollen, die von cURL unterstützt werden, können Sie es sogar zum Testen der Protokollunterstützung verwenden. Wenn Sie überprüfen möchten, ob eine Website eine bestimmte Version von SSL unterstützt, können Sie den --sslv<version> verwenden oder --tlsv<version> Flaggen. Wenn Sie beispielsweise überprüfen möchten, ob eine Website TLS v1.2 unterstützt, können Sie Folgendes verwenden:

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

Die Anfrage erfolgt normal, was bedeutet, dass die Seite TLSv1.2 unterstützt. Lassen Sie uns nun überprüfen, ob die Site SSL v3 unterstützt:

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

Dieser Befehl löst einen handshake_failed aus Fehler, weil der Server diese Version von SSL nicht unterstützt.

Bitte beachten Sie, dass abhängig von Ihrem System und der Version/Konfiguration der Bibliothek einige dieser Versionsoptionen möglicherweise nicht funktionieren. Die obige Ausgabe wurde der cURL von Ubuntu 16.04 entnommen. Wenn Sie dies jedoch mit cURL in MacOS 10.14 versuchen, wird ein Fehler ausgegeben:

Sie können auf die gleiche Weise auch HTTP-Protokollversionen testen, indem Sie die Flags --http1.0 verwenden , --http1.1 oder --http2 .

Festlegen des Host-Headers und --resolve von cURL Möglichkeit

Zuvor haben wir darüber gesprochen, wie ein Webserver je nach Header „Host“ verschiedene Websites für Besucher bereitstellt. Dies kann sehr nützlich sein, um zu überprüfen, ob das virtuelle Hosting Ihrer Website korrekt konfiguriert ist, indem Sie den Header „Host“ ändern. Angenommen, Sie haben einen lokalen Server unter 192.168.0.1 mit zwei konfigurierten Websites, nämlich example1.com und example2.com . Jetzt können Sie testen, ob alles richtig konfiguriert ist, indem Sie den Host-Header setzen und prüfen, ob die richtigen Inhalte bereitgestellt werden:

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

Leider funktioniert dies nicht so gut für Websites, die HTTPS verwenden. Eine einzelne Website kann so konfiguriert werden, dass sie mehrere Websites bedient, wobei jede Website ihr eigenes SSL/TLS-Zertifikat verwendet. Da SSL/TLS auf einer niedrigeren Ebene als HTTP stattfindet, bedeutet dies, dass Clients wie cURL dem Server mitteilen müssen, auf welche Website wir auf der SSL/TLS-Ebene zuzugreifen versuchen, damit der Server das richtige Zertifikat auswählen kann. Standardmäßig teilt cURL dies dem Server immer mit.

Wenn Sie jedoch wie im obigen Beispiel eine Anfrage an eine bestimmte IP senden möchten, wählt der Server möglicherweise ein falsches Zertifikat aus, und dies führt dazu, dass die SSL/TLS-Überprüfung fehlschlägt. Der Host -Header funktioniert nur auf HTTP-Ebene und nicht auf SSL/TLS-Ebene.

Um das oben beschriebene Problem zu vermeiden, können Sie den --resolve verwenden Flagge. Das Auflösungs-Flag sendet die Anfrage an den Port und die IP Ihrer Wahl, sendet aber den Website-Namen sowohl auf SSL/TLS- als auch auf HTTP-Ebene korrekt.

Betrachten wir das vorherige Beispiel. Wenn Sie HTTPS verwenden und es an den lokalen Server senden möchten 192.168.0.1 , können Sie Folgendes verwenden:

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

Es funktioniert auch gut für HTTP. Angenommen, Ihr HTTP-Server bedient Port 8080, Sie können entweder den --resolve verwenden kennzeichnen oder den Host-Header und den Port manuell setzen, etwa so:

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

Die beiden oben genannten Befehle sind gleichwertig.

Domänen in IPv4- und IPv6-Adressen auflösen

Manchmal möchten Sie vielleicht überprüfen, ob eine Site sowohl über IPv4 als auch über IPv6 erreichbar ist. Sie können cURL zwingen, sich entweder mit der IPv4- oder über IPv6-Version Ihrer Website zu verbinden, indem Sie den -4 verwenden oder -6 Flaggen.

Bitte beachten Sie, dass eine Website nur dann über IPv4 und IPv6 erreichbar ist, wenn:

  • Es gibt entsprechende DNS-Einträge für die Website, die sie mit IPv4- und IPv6-Adressen verknüpft.
  • Ihr System verfügt über IPv4- und IPv6-Konnektivität.

Wenn Sie beispielsweise prüfen möchten, ob Sie die Website icanhazip.com über IPv6 erreichen können, können Sie Folgendes verwenden:

curl -6 https://icanhazip.com/

Wenn die Site über HTTPS erreichbar ist, sollten Sie Ihre eigene IPv6-Adresse in der Ausgabe erhalten. Diese Website gibt die öffentliche IP-Adresse jedes Clients zurück, der sich mit ihr verbindet. Je nach verwendetem Protokoll wird also eine IPv4- oder IPv6-Adresse angezeigt.

Sie können auch den -v verwenden Option zusammen mit -4 und -6 um weitere Details zu erhalten.

Zertifikatsprüfungen von cURL deaktivieren

Standardmäßig überprüft cURL Zertifikate, wenn es eine Verbindung über HTTPS herstellt. Es ist jedoch oft nützlich, die Zertifikatsprüfung zu deaktivieren, wenn Sie versuchen, Anfragen an Sites zu stellen, die selbstsignierte Zertifikate verwenden, oder wenn Sie eine Site mit einem falsch konfigurierten Zertifikat testen müssen.

Um Zertifikatsprüfungen zu deaktivieren, verwenden Sie den -k Zertifikat. Wir werden dies testen, indem wir eine Anfrage an expired.badssl.com stellen, eine Website, die ein abgelaufenes SSL-Zertifikat verwendet.

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

Mit dem -k Option werden die Zertifikatsprüfungen ignoriert. cURL lädt also die Seite herunter und zeigt den Anforderungstext erfolgreich an. Andererseits, wenn Sie nicht den -k verwendet haben Option erhalten Sie eine Fehlermeldung ähnlich der folgenden:

Fehlerbehebung bei Website-Problemen mit „cURL-Timing-Aufschlüsselung“

Möglicherweise stoßen Sie auf Situationen, in denen eine Website für Sie sehr langsam ist, und Sie möchten sich eingehender mit dem Problem befassen. Mit dem -w können Sie cURL dazu bringen, Details der Anfrage anzuzeigen, wie z. B. die Zeit, die für die DNS-Auflösung, den Verbindungsaufbau usw. benötigt wird Möglichkeit. Dies wird oft als cURL-„Timing-Aufschlüsselung“ bezeichnet.

Wenn Sie beispielsweise diese Details für die Verbindung zu https://www.booleanworld.com/ sehen möchten , ausführen:

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'

(Wenn Sie dies von einem Windows-System aus ausführen, ändern Sie den /dev/null bis NUL ).

Sie erhalten eine ähnliche Ausgabe wie diese:

Jeder dieser Werte wird in Sekunden angegeben, und hier ist, was jeder Wert darstellt:

  • Namenssuche — Die für die DNS-Auflösung benötigte Zeit.
  • verbinden — Die zum Aufbau der TCP-Verbindung benötigte Zeit.
  • appconnect — Dies ist die Zeit, die benötigt wird, um Verbindungen für beliebige Schichten zwischen TCP und der Anwendungsschicht herzustellen, z. B. SSL/TLS. In unserem Fall ist die Anwendungsschicht HTTP. Auch wenn es keine solche Zwischenschicht gibt (z. B. bei einer direkten HTTP-Anforderung), ist diese Zeit immer 0.
  • Vorübertragung — Dies ist die Zeit vom Start bis zum Beginn der Übertragung der Datei.
  • weiterleiten — Dies ist die Gesamtzeit, die für die Verarbeitung von Weiterleitungen benötigt wird.
  • Übertragung starten — Zeit, die vom Start bis zur Übertragung des ersten Bytes gedauert hat.
  • insgesamt — Die Gesamtzeit, die cURL benötigt, um den gesamten Vorgang abzuschließen.

Angenommen, Sie haben Verzögerungen beim Herstellen einer Verbindung zu einer Website und stellen fest, dass der Wert „namelookup“ zu hoch war. Da dies auf ein Problem mit dem DNS-Server Ihres Internetdienstanbieters hinweist, können Sie damit beginnen, herauszufinden, warum die DNS-Suche so langsam ist, und bei Bedarf zu einem anderen DNS-Server wechseln.

cURL-Konfigurationsdateien

Manchmal möchten Sie vielleicht, dass alle cURL-Anforderungen dieselben Optionen verwenden. Das manuelle Übergeben dieser Optionen ist keine praktikable Lösung, daher können Sie mit cURL Optionen in einer Konfigurationsdatei angeben.

Die Standardkonfigurationsdatei befindet sich in ~/.curlrc unter Linux/MacOS und %appdata%_curlrc unter Windows. Innerhalb dieser Datei können Sie alle benötigten Optionen angeben, wie zum Beispiel:

# 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

Nachdem Sie die obige Datei erstellt haben, versuchen Sie, eine Anfrage mit curl example.com zu stellen . Sie werden feststellen, dass diese Optionen wirksam wurden.

Wenn Sie anstelle der Standardkonfigurationsdatei eine benutzerdefinierte Konfigurationsdatei verwenden möchten, können Sie -K verwenden Option, um curl auf Ihre Konfigurationsdatei zu verweisen. Wenn Sie beispielsweise eine Konfigurationsdatei mit dem Namen config.txt haben , dann können Sie es verwenden mit:

curl -K config.txt example.com

Schlussfolgerung

In diesem Artikel haben wir die häufigsten Verwendungen des cURL-Befehls behandelt. Natürlich kratzt dieser Artikel nur an der Oberfläche und cURL kann noch eine ganze Menge anderer Dinge. Sie können man curl eingeben in Ihrem Terminal oder besuchen Sie einfach diese Seite, um die Manpage zu sehen, die alle Optionen auflistet.


Cent OS
  1. Tutorial für Linux-Ping-Befehle mit Beispielen

  2. Tmux-Tutorial:Installation und Verwendung mit Befehlsbeispielen

  3. Linux-Curl-Befehl mit Beispielen erklärt

  4. Nohup-Befehl mit Beispielen

  5. vim Tutorial mit Befehlsbeispielen

15 Linux-PS-Befehl mit Beispielen

Youtube-dl Tutorial mit Beispielen für Anfänger

Das fc Command Tutorial mit Beispielen für Anfänger

Linux-IP-Befehl mit Beispielen

Verlaufsbefehl mit Beispielen

Tutorial für Linux-Suchbefehle (mit Beispielen)