Getty Images/iStockphoto

Mit cURL und Wget Netzwerkdateien per CLI herunterladen

Nicht nur Webbrowser nutzen HTTP zum Datei-Download. Auch mit den Befehlszeilen-Tools cURL und Wget lassen sich etwa VM-Images, Konfigurationsdateien und Updates herunterladen.

Beim Anzeigen von Webseiten werden Dateien heruntergeladen, die anschließend ein Browser interpretiert. So gesehen ist HTTP, wie FTP, nur eine weitere Funktion, um Dateien zu übertragen. Wenn das stimmt, welche anderen Tools unterstützen dann ähnliche Dateitransfers von Webservern oder anderen Remote-Systemen? Die Antwort lautet: cURL und Wget.

Sowohl cURL als auch Wget sind Tools für den Upload oder Download von Dateien. Auch wenn viele Benutzer das eine Tool dem anderen vorziehen, hat jedes seine eigenen Stärken und Schwächen.

Dieser Artikel stellt cURL und Wget vor, liefert Syntaxbeispiele, zeigt Anwendungsfälle und beschreibt die jeweiligen Vorteile. Diese Tools finden sich hauptsächlich auf Linux-Systemen, aber Netzwerkadministratoren können sie auch unter Windows und macOS nutzen.

Was ist cURL?

cURL steht für Client for URLs. Es handelt sich um ein flexibles Tool, das Dateiübertragungen zu und von Remote-Systemen über eine Vielzahl von Protokollen ermöglicht.

Bevor wir uns mit der grundlegenden Syntax befassen, müssen wir cURL erst einmal installieren.

cURL installieren

Bei vielen Linux-Distributionen ist cURL bereits vorinstalliert. Verwenden Sie den Paketmanager des Systems, um das Tool bei Bedarf hinzuzufügen.

Unter Red Hat und verwandten Distributionen geben Sie den folgenden Befehl ein:

dnf install curl

Wer auf Debian basierende Distributionen verwendet, kann den folgenden Befehl verwenden:

apt install curl

Sie müssen für die Installation Root-Rechte besitzen. Bei einer Fehlermeldung verwenden sie deshalb vorangestellten sudo-Befehl, also beispielsweise:

sudo apt install curl

Das gilt sowohl für Linux als auch für macOS und in der Regel auch für alle weiteren in diesem Artikel besprochenen Befehle. Beispielsweise unter Ubuntu muss der aktuelle Benutzer außerdem als Systemverwalter angemeldet sein. Auf den meisten Macs ist cURL bereits vorhanden. Falls nicht, müssen Sie zuerst Xcode und dann den Paketmanager Home Brew installieren.

Mac-Anwender können dann cURL dann mit Brew hinzufügen oder aktualisieren, indem sie das folgende Kommando eingeben:

brew install curl

oder wie beschrieben mit

sudo brew install curl

Windows-Benutzer können cURL mit den hier zu findenden Builds auf ihren Systemen installieren. Beachten Sie, dass in Windows 10 und 11 cURL bereits enthalten ist.

Wenn cURL nicht standardmäßig installiert ist, müssen Sie möglicherweise auch die libcurl-Bibliothek diesen Systemen hinzufügen.

Grundlegende cURL-Syntax

Wer oft mit der Befehlszeile arbeitet, dürfte mit der grundlegenden cURL-Syntax keine Probleme haben. Geben Sie den Befehl, gefolgt von einer oder mehreren Optionen sowie dem Pfad zur herunterzuladenden Datei ein.

curl -Optionen /Pfad/zur/Datei

Sie können auch ein Protokoll angeben, wie in einem späteren Abschnitt beschrieben. Das Standardprotokoll ist HTTP.

Eine Datei mit cURL herunterladen

Die beiden wichtigsten Optionen für das Herunterladen von Dateien mit dem cURL-Befehl sind -o und -O. Die Option -o speichert die Datei an einem vom Benutzer spezifizierten Ort unter einem bestimmten Namen. Die Option -O legt die Datei am aktuellen Ort unter Verwendung des aktuellen Dateinamens ab.

Angenommen, jemand möchte eine Datei namens projekte.pdf von der fiktiven Website projekt-produkte.com herunterladen. Das PDF befindet sich in einem Ordner mit dem Namen 2023. Der erste Befehl sieht folgendermaßen aus:

curl -O http://projekt-produkte.com/2023/projekte.pdf

cURL lädt die Datei in das aktuelle Arbeitsverzeichnis des Benutzers herunter – zur Überprüfung des Speicherorts geben Sie den Befehl pwd ein – und vergibt für sie den Namen projekte.pdf.

Die Datei lässt sich jedoch auch während der Übertragung umbenennen und mit der Option -o in einem bestimmten Verzeichnis ablegen. So könnte das Kommando aussehen, wenn ein Anwender der Datei einen neuen Namen geben und sie im Verzeichnis ziele in einem Home-Ordner speichern möchte:

curl -o /home/user/ziele/neue-projekte.pdf http://projekt-produkte.com/2023/projekte.pdf

Vielleicht sollen auch mehrere Dateien von dieser Site heruntergeladen werden. Angenommen, ein Benutzer möchte im ursprünglichen Szenario statt projekte.pdf zwei PDFs herunterladen. Dann könnte der Befehl wie folgt aussehen:

curl -O http://projekt-produkte.com/2023/projekte1.pdf -O http://projekt-produkte.com/2023/projekte2.pdf

Eine der Stärken von cURL sind die zahlreichen unterstützten Protokolle. FTP ist effizienter, wenn es um den Transfer großer Dateien geht, so dass es sich oft anstelle von HTTP empfiehlt. Das Protokoll lässt sich im Pfad einfach mit dem folgenden Befehl spezifizieren:

curl -u Benutzername:Passwort -O ftp://projekt-produkte.com/2023/projekte.pdf

FTP erfordert möglicherweise eine Authentifizierung. Verwenden Sie daher wie gezeigt die Option -u, um einen auf dem Remote-System bekannten Benutzernamen inklusive Passwort anzugeben.

Eine Datei mit cURL hochladen

Sie können mit cURL auch Dateien an einen Remote-Ort hochladen. Dies kann zum Beispiel im Fall von Protokolldateien hilfreich sein.

Die Option -d kennzeichnet die Übertragung als HTTP-POST-Transfer. Fügen Sie den lokalen Pfad zu der Datei hinzu, die an den Remote-Server gesendet werden soll, und geben Sie dann die Adresse des Remote-Servers an. Der folgende Befehl überträgt projekte.pdf in das angegebene Verzeichnis auf dem HTTP-Server:

curl -d @projekte.pdf http://projekt-produkte.com/uploads

Für einen FTP-Upload verwenden Sie dieselbe Syntax, ändern aber das Protokoll, wie in diesem Beispiel:

curl -d @projekte.pdf ftp://projekt-produkte.com/uploads

Zusätzliche cURL-Optionen

CURL ist ein flexibles Werkzeug, das viele Möglichkeiten bietet, um die Bedürfnisse der Benutzer abzudecken. Folgend finden Sie einige weitere Beispiele für weniger gebräuchliche Funktionen.

Die Option --compressed sorgt dafür, dass die Daten an der Quelle komprimiert und am Ziel wieder dekomprimiert werden. Diese Option empfiehlt sich, wenn die Bandbreite begrenzt ist.

Nutzen Sie die Option -C, um einen Dateitransfer wieder aufzunehmen, der beispielsweise durch einen Netzwerk- oder Stromausfall unterbrochen wurde. Mit dieser Option wird die Übertragung unter Verwendung des bestehenden Dateinamens fortgesetzt, anstatt ihn zu duplizieren.

CURL bietet unter anderem die folgenden Vorteile:

  • Unterstützung vieler Protokolle.
  • Für viele Plattformen verfügbar.
  • Upload und Download von Dateien.
  • Unterstützung von Komprimierungsoptionen.

Manuelle Dateiübertragungen, wie die oben beschriebenen, sind sicherlich eine Möglichkeit. Denken Sie jedoch an das Potenzial, das sich bietet, wenn man den Befehl curl in ein Skript integriert.

Vielleicht beinhaltet ein orchestrierter Entwicklungsprozess automatisierte Nightly Builds in der Zentrale, die an Remote-Büros übertragen werden müssen. Ein auf dem curl-Befehl basierendes Skript könnte diesen Prozess optimieren. Ein weiterer Anwendungsfall sind VM-Images, die an andere Standorte verteilt werden müssen. Oder die Remote-Server müssen Protokolldateien oder andere Daten an ein zentrales Speicher-Repository in der Zentrale übertragen. Auch für diese Szenarien ist cURL eine Option.

Option Beschreibung
-O Lädt Ressourcen in das aktuelle Verzeichnis herunter.
-o Lädt Ressourcen in ein bestimmtes Verzeichnis herunter.
-u Gibt Benutzernamen und Passwort für FTP an.
-d Lädt eine Datei hoch.
--compressed Komprimiert die Übertragung.
-C Setzt eine unterbrochene Übertragung fort.

Was ist Wget?

Das Utility Wget dient im Vergleich zu cURL einem spezifischeren Zweck. Es ist für das Herunterladen von Dateien von Webservern mit den gängigsten Protokollen gedacht: HTTP, HTTPS, FTP und FTPS. Benutzer können einzelne Dateien, Dateigruppen oder sogar Tar-Archive abrufen.

Wget installieren

Es ist eher unwahrscheinlich, dass Wget – anders als cURL – auf einem Linux-System vorinstalliert ist. Auch auf macOS ist es nicht standardmäßig verfügbar. Wget lässt sich auf diesen und anderen Plattformen aber recht einfach nachrüsten.

Auf einem Linux-Rechner verwenden Sie dazu den Paketmanager des Systems.

Unter Red Hat und verwandten Distributionen geben Sie den folgenden Befehl ein:

dnf install wget

Wer Debian-basierende Distributionen einsetzt, kann stattdessen den folgenden Befehl nutzen:

apt install wget

Um Wget auf einem Mac mit Brew zu installieren oder zu aktualisieren, setzen Sie dieses Kommando ab:

brew install wget

oder eventuell

sudo brew install wget

Bei den aktuellen Versionen von Windows 10 und 11 sollte Wget schon vorhanden sein. Falls nicht, laden Sie die ausführbare Wget-Datei (wget.exe) hier herunter. Um die Anwendung auszuführen, speichern Sie Wget in einem Ordner Ihrer Wahl und fügen dann diesen Ordner zur Umgebungsvariablen PATH hinzu. Eine andere Alternative besteht darin, die Datei im Verzeichnis C:\Windows\System32 abzulegen, obwohl dies nicht als Best Practice gilt.

Grundlegende Wget-Syntax

Beginnen wir einfach damit, eine Datei von einer Website herunterzuladen – vielleicht die neueste Version einer Anwendung, eines VM-Images, einer Docker-Datei, einer Konfigurationsdatei oder eines Archivs. Derzeit stellen viele Anbieter die aktuellste Version ihrer Produkte als einfachen Download unter einem einheitlichen Pfad zur Verfügung.

Die allgemeine Syntax hat folgende Form:

Befehl -Optionen Pfad

Ein einfacher Download von einer exemplarischen Website sieht folgendermaßen aus:

wget http://projekt-produkte.com/2023/projekte.pdf

Wget lädt das PDF in das aktuelle Verzeichnis herunter.

Standardmäßig holt Wget sich die Dateien von der angegebenen URL und legt sie im aktuellen Arbeitsverzeichnis ab. Mit der Option -P, gefolgt von dem Ordner, in dem die heruntergeladene Datei gespeichert werden soll, können Benutzer ein anderes Ziel festlegen.

Um zum Beispiel eine Datei von einer Website abzurufen und sie im Verzeichnis /projects/updates abzulegen, geben Sie Folgendes ein:

wget -P /projects/updates http://projekt-produkte.com/2023/projekte.pdf

Diese Option ist hilfreich, wenn Benutzer mit dem Skript Wget mehrere Dateien abrufen und an einem anderen Ort als dem des Skripts selbst ablegen möchten.

Wget verwendet normalerweise den Originalnamen der Zieldatei, aber die Datei lässt sich während des Downloads über die Option -O umbenennen. So sieht der entsprechende Befehl aus:

wget -O 2023projekte.pdf http://projekt-produkte.com/2023/projekte.pdf

Diese Option erleichtert es, den Inhalt der abgerufenen Dateien zu erkennen, wenn die Anbieter für ihre Ressourcen allgemeine Namen vergeben, etwa lastest.doc oder current.zip.

Eine besonders nützliche Funktion von Wget ist die Möglichkeit, mehrere Zielsites in einer Textdatei anzugeben. Wget kann dann die Datei verarbeiten und die Ressourcen von den einzelnen Sites abrufen. Verwenden Sie die Option -i, um die Eingabedatei zu definieren.

Der Inhalt der Textdatei ressourcen-abrufen.txt könnte folgendermaßen aussehen:

http://projekt-produkte.com/2023/projekte.pdf
http://projekt-produkte.com/2022/archiv_projekte.zip
http://projekt-produkte.com/2023/ressourcen.tar.gz

Mit dem nachstehenden Kommando können Sie die Datei referenzieren und die angegebenen Ressourcen herunterladen:

wget -i ressourcen-abrufen.txt

Wget mit FTP verwenden

Auch wenn das Standardprotokoll HTTP oder HTTPS ist, können Benutzer FTP angeben, um eine Verbindung zu FTP-Servern für Datei-Downloads herzustellen. Denken Sie daran, dass FTP eine Authentifizierung erfordert. Dementsprechend gilt es, einen Benutzernamen und ein Passwort anzugeben, die vom Remote-FTP-Server erkannt werden, wie hier zu sehen ist:

wget --ftp-user=NAME --ftp-password=PASSWORT ftp://projekt-produkte/2023/projekte.pdf

Seien Sie vorsichtig, wenn Sie sensible Authentifizierungsinformationen in eine Textdatei aufnehmen. Überlegen Sie sich sorgfältig die Möglichkeiten, bevor Sie FTP-Downloads in Textdateien mit der oben erwähnten Option -i durchführen.

Eine der Stärken von Wget liegt darin, dass es sehr mächtig und flexibel ist, Dateien rekursiv vom Quellwebserver abzurufen Es gibt etliche Optionen und Flag-Kombinationen. Angenommen, das Verzeichnis 2023 enthält viele Dateien, dann lautet der grundlegende rekursive Befehl -r wie folgt:

wget -r http://projekt-produkte.com/2023/

Es empfiehlt sich, die Option -np zu ergänzen, da Wget sonst das übergeordnete Verzeichnis und dessen Inhalt herunterlädt. Passen Sie daher den oben genannten Befehl folgendermaßen an:

wget -np -r http://projekt-produkte.com/2023/

Es gibt zusätzliche Optionen, um die rekursive Ebene für den Abruf oder die Anzahl der abzurufenden Unterverzeichnisse anzugeben. Mit anderen Flags können Benutzer Dateien ausschließen, die sie nicht herunterladen wollen.

Option Beschreibung
-R filename Gibt eine Datei an, die vom Abruf ausgeschlossen werden soll.
-l(Zahl) Gibt die Anzahl der Ebenen an, die rekursiv abgerufen werden sollen, indem (Zahl) durch die Anzahl der Ebenen ersetzt wird.

Die folgende Tabelle gibt einen Überblick über die oben erwähnten wichtigsten Optionen.

Option Beschreibung
(Keine Option) Lädt die angegebene Datei in das aktuelle Verzeichnis herunter.
-P Gibt ein vom aktuellen Verzeichnis abweichendes Zielverzeichnis an.
-O Legt einen neuen Dateinamen für die abgerufene Datei fest.
-i Ruft eine Liste der herunterzuladenden Dateien aus einer angegebenen Textdatei ab.

Zusätzliche Wget-Optionen

Die folgenden zusätzlichen Optionen können sich in bestimmten Fällen als hilfreich erweisen.

Mit der Option -b lässt sich festlegen, dass der Dateitransfer per Wget im Hintergrund läuft. Wenn es sich um einen zeitaufwendigen Download handelt, überprüfen Sie die Protokolldatei mit dem zweiten unten aufgeführten Befehl:

wget -b http://projekt-produkte.com/2023/vm-image-lastest.iso
tail -f wget -log

Wget ist ein älteres Tool aus der Zeit, als die Netzwerkverbindungen noch nicht so zuverlässig waren. Ein Merkmal ist die Möglichkeit, unterbrochene Downloads neu durchzuführen. Standardmäßig erfolgen 20 Wiederholungsversuche. Benutzer können diesen Wert jedoch mit der Option --tries= anpassen. Er lässt sich auf 0, inf (unendlich) oder einen beliebigen Wert dazwischen festlegen, wie hier zu sehen:

wget --tries=42 http://projekt-produkte.com/2023/projekte.pdf

In ähnlicher Weise können Sie mit der Option -c unterbrochene Downloads fortsetzen. Wenn ein Download aufgrund einer Unterbrechung neu starten muss, wird an den Namen der neuen Datei .1 angehängt, da die Datei aus dem ersten Download-Versuch ja bereits existiert.

wget -c http://projekt-produkte.com/2023/ vm-image-lastest.iso

Ein weiteres Problem bei großen Dateien ist die Kontrolle des Bandbreitenverbrauchs. Mit der Option --limit-rate= können Sie Wget anweisen, nur einen Teil der verfügbaren Bandbreite zu beanspruchen. Ein Limit von 750 KByte lässt sich so festlegen:

wget --limit-rate=750k http://projekt-produkte.com/2023/ vm-image-lastest.iso

Es gibt noch zahlreiche andere Wget-Optionen, aber diese sollten für den Anfang ausreichen.

Gängige Anwendungsfälle für beide Tools

Sowohl cURL als auch Wget eignen sich für Dateiübertragungen. Zu den weiteren Anwendungsfällen gehören unter anderem folgende Punkte:

  • Herunterladen der neuesten Images von Containern oder VMs.
  • Herunterladen von ISO-Images bestimmter Betriebssysteme.
  • Herunterladen von Softwarepaketen, wie .msi von Microsoft, .sh von Brew oder .rpm beziehungsweise .deb von Linux.
  • Herunterladen von Konfigurationsdateien aus einem zentralen Repository.
  • Spiegeln wichtiger Webseiten für Air-Gapped- oder isolierte Netzwerke.
  • Hochladen – im Fall von cURL – der oben genannten Beispiele auf Remote-Zielserver.

Für jedes dieser Beispiele lässt sich ein öffentlicher internetbasierter Webserver als Quelle oder ein interner privater Webserver verwenden. Mit anderen Worten: Benutzer können cURL oder Wget einfach in das Dateiverteilungssystem ihres Unternehmens integrieren.

Fazit

Wie unterscheiden sich nun die beiden Tools voneinander? Nachfolgend finden Sie einige wesentliche Aspekte:

  • CURL nutzt mehr Protokolle und unterstützt mehr Host-Plattformen.
  • CURL ermöglicht den Upload und Download von Ressourcen, während Wget hauptsächlich für das Herunterladen von Dateien zum Einsatz kommt.
  • Wget ist eine einfache ausführbare Datei auf dem System, während es sich bei cURL eher um eine komplette Anwendung mit einer dazugehörigen Bibliothek handelt.
  • Uploads erfolgen bei Wget nur über eine eingeschränkte HTTP-POST-Funktion, während cURL die bessere Wahl ist, wenn es darum geht, Dateien an Remote-Standorte zu übertragen.
  • Die Möglichkeit von Wget, Ressourcen rekursiv abzurufen, ist ein Vorteil, den cURL nicht bietet.

Man sollte zudem wissen, dass cURL eine ähnliche Lizenz wie die MIT-Lizenz verwendet. Es handelt sich jedoch um freie und quelloffene Software. Wget ist ein GNU-Utility und basiert auf der GNU General Public License für die Lizenzierung.

Wget eignet sich eher für das Abrufen von Webseiten oder Websites, während cURL ein universelles Tool für den Dateitransfer darstellt. Wählen Sie anhand des vorstehenden Vergleichs das passende Tool für die jeweilige Aufgabe aus. Berücksichtigen Sie außerdem, wie sich die Tools in ein Automatisierungskonzept integrieren lassen, um die Effizienz zu steigern.

Erfahren Sie mehr über Netzwerksoftware

ComputerWeekly.de
Close