Wie man Dateien mit cURL herunterlädt

Client URL, oder cURL, ist eine Bibliothek und ein Befehlszeilenprogramm für die Übertragung von Daten zwischen Systemen. Es unterstützt viele Protokolle und wird in der Regel standardmäßig auf vielen Unix-ähnlichen Betriebssystemen installiert. Aufgrund seiner allgemeinen Verfügbarkeit ist es eine gute Wahl, wenn Sie eine Datei auf Ihr lokales System herunterladen müssen, insbesondere in einer Serverumgebung.

In diesem Lernprogramm werden Sie den Befehl curl verwenden, um eine Textdatei von einem Webserver herunterzuladen. Sie zeigen den Inhalt an, speichern ihn lokal und weisen curl an, Weiterleitungen zu folgen, wenn Dateien verschoben wurden.

Das Herunterladen von Dateien aus dem Internet kann gefährlich sein, daher sollten Sie darauf achten, dass Sie von seriösen Quellen herunterladen. In diesem Lernprogramm laden Sie Dateien von DigitalOcean herunter und werden keine der heruntergeladenen Dateien ausführen.

Schritt 1 – Abrufen von Remote-Dateien

Der Befehl “curl” ruft standardmäßig und ohne Kommandozeilenargumente eine Datei ab und gibt deren Inhalt in der Standardausgabe aus.

Lassen Sie es uns ausprobieren, indem wir die Datei robots.txt von Digitalocean.com herunterladen:

curl https://www.digitalocean.com/robots.txt

Der Inhalt der Datei wird auf dem Bildschirm angezeigt:

Output
 User-agent: *
 Disallow:
 sitemap: https://www.digitalocean.com/sitemap.xml
 sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz
 sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz
 sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

Geben Sie curl eine URL, und es wird die Ressource abrufen und ihren Inhalt anzeigen.

Entfernte Dateien speichern

Eine Datei zu holen und ihren Inhalt anzuzeigen ist schön und gut, aber was ist, wenn Sie die Datei tatsächlich auf Ihrem System speichern wollen?

Um die entfernte Datei auf Ihrem lokalen System zu speichern, mit dem gleichen Dateinamen wie der des Servers, von dem Sie herunterladen, fügen Sie das Argument –remote-name hinzu oder verwenden Sie die Option -O:

curl -O https://www.digitalocean.com/robots.txt

Ihre Datei wird heruntergeladen:

Output
   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
 100   286    0   286    0     0   5296      0 --:--:-- --:--:-- --:--:--  5296

Anstatt den Inhalt der Datei anzuzeigen, zeigt curl eine textbasierte Fortschrittsanzeige an und speichert die Datei unter demselben Namen wie die Remote-Datei. Sie können die Dinge mit dem Befehl cat überprüfen:

cat robots.txt

Die Datei enthält denselben Inhalt, den Sie zuvor gesehen haben:

Output
 User-agent: *
 Disallow:
 sitemap: https://www.digitalocean.com/sitemap.xml
 sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz
 sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz
 sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

Sehen wir uns nun die Angabe eines Dateinamens für die heruntergeladene Datei an.

Schritt 2 – Speichern von Remote-Dateien unter einem bestimmten Dateinamen

Möglicherweise haben Sie bereits eine lokale Datei mit demselben Namen wie die Datei auf dem Remote-Server.

Um zu vermeiden, dass Ihre lokale Datei mit demselben Namen überschrieben wird, verwenden Sie das Argument -o oder –output, gefolgt vom Namen der lokalen Datei, in der Sie den Inhalt speichern möchten.

Führen Sie den folgenden Befehl aus, um die Remote-Datei “robots.txt” in die lokal benannte Datei “do-bots.txt” herunterzuladen:

curl -o do-bots.txt  https://www.digitalocean.com/robots.txt

Auch hier sehen Sie den Fortschrittsbalken:

Output
   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
 100   286    0   286    0     0   6975      0 --:--:-- --:--:-- --:--:--  7150

Verwenden Sie nun den Befehl cat, um den Inhalt der Datei do-bots.txt anzuzeigen und zu überprüfen, ob es sich um die heruntergeladene Datei handelt:

cat do-bots.txt

Der Inhalt ist der gleiche:

Output
 User-agent: *
 Disallow:
 sitemap: https://www.digitalocean.com/sitemap.xml
 sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz
 sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz
 sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

Standardmäßig folgt curl keinen Weiterleitungen, so dass Sie beim Verschieben von Dateien möglicherweise nicht das bekommen, was Sie erwarten. Schauen wir uns an, wie man das beheben kann.

Schritt 3 – Redirects folgen

Bis jetzt haben alle Beispiele voll qualifizierte URLs enthalten, die das https:// Protokoll beinhalten. Wenn Sie zufällig versuchen würden, die robots.txt-Datei abzurufen und nur www.digitalocean.com angeben würden, würden Sie keine Ausgabe sehen, da DigitalOcean Anfragen von http:// auf https:// umleitet:

Sie können dies überprüfen, indem Sie das Flag -I verwenden, das die Anfrage-Header und nicht den Inhalt der Datei anzeigt:

curl -I www.digitalocean.com/robots.txt

Die Ausgabe zeigt, dass die URL umgeleitet wurde. In der ersten Zeile der Ausgabe steht, dass sie verschoben wurde, und in der Zeile Location steht, wohin:

Output
 HTTP/1.1 301 Moved Permanently
 Cache-Control: max-age=3600
 Cf-Ray: 65dd51678fd93ff7-YYZ
 Cf-Request-Id: 0a9e3134b500003ff72b9d0000000001
 Connection: keep-alive
 Date: Fri, 11 Jun 2021 19:41:37 GMT
 Expires: Fri, 11 Jun 2021 20:41:37 GMT
 Location: https://www.digitalocean.com/robots.txt
 Server: cloudflare
 . . .

Sie könnten curl verwenden, um eine weitere Anfrage manuell zu stellen, oder Sie können das Argument –location oder -L verwenden, das curl anweist, die Anfrage an den neuen Ort neu zu stellen, wenn es auf eine Weiterleitung stößt. Probieren Sie es aus:

curl -L www.digitalocean.com/robots.txt

Dieses Mal sehen Sie die Ausgabe, da curl dem Redirect gefolgt ist:

Output
 User-agent: *
 Disallow:
 sitemap: https://www.digitalocean.com/sitemap.xml
 sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz
 sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz
 sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

Sie können das Argument -L mit einigen der vorgenannten Argumente kombinieren, um die Datei auf Ihr lokales System herunterzuladen:

curl -L -o do-bots.txt www.digitalocean.com/robots.txt

Warnung: Viele Online-Ressourcen fordern Sie auf, curl zu verwenden, um Skripte herunterzuladen und sie auszuführen. Bevor Sie heruntergeladene Skripte ausführen, sollten Sie deren Inhalt überprüfen, bevor Sie sie ausführbar machen und ausführen. Verwenden Sie den Befehl less, um den Code zu überprüfen, um sicherzustellen, dass er etwas ist, das Sie ausführen möchten.

Fazit

Mit curl können Sie schnell Dateien von einem entfernten System herunterladen. curl unterstützt viele verschiedene Protokolle und kann auch komplexere Webanfragen stellen, einschließlich der Interaktion mit entfernten APIs zum Senden und Empfangen von Daten.

Sie können mehr erfahren, indem Sie die Handbuchseite für curl anzeigen, indem Sie man curl ausführen.