Linux Curl Befehl Tutorial für Anfänger (6 Beispiele)
Während Webbrowser das primäre Medium sind, über das Benutzer Dinge aus dem Internet herunterladen, gibt es einige Linux-Befehle, mit denen Sie dies auch tun können. Diese Tools eignen sich besonders für Headless-Systeme, bei denen es keine GUI gibt.
In diesem Tutorial werden wir einen solchen Befehl – Curl – besprechen, mit dem Sie unter anderem Material aus dem Web herunterladen können. Die in diesem Tutorial beschriebenen Beispiele für den curl Aufruf funktionieren auf allen aktuellen Ubuntu Versionen inkl. Ubuntu 22.04.
Linux Curl-Befehl
Der Befehl curl ermöglicht es Ihnen, Daten über die Befehlszeile unter Linux herunterzuladen und hochzuladen. Folgendes ist seine Syntax:
curl [options] [URL...]
Und hier ist, was die Man Page über diesen Befehl sagt:
curl is a tool to transfer data from or to a server, using one of the supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP). The command is designed to work without user inter? action.
curl offers a busload of useful tricks like proxy support, user authen tication, FTP upload, HTTP post, SSL connections, cookies, file trans fer resume, Metalink, and more. As you will see below, the number of features will make your head spin! curl is powered by libcurl for all transfer-related features. See libcurl(3) for details.
Im Folgenden finden Sie einige Beispiele im Q&A-Stil, die Ihnen eine bessere Vorstellung davon vermitteln sollen, wie Curl funktioniert.
Q1. Wie funktioniert der Curl-Befehl?
Die grundlegende Verwendung ist ziemlich einfach – übergeben Sie einfach die URL als Eingabe an den Befehl curl und leiten Sie die Ausgabe in eine Datei um.
Zum Beispiel:
curl https://releases.ubuntu.com/22.04/ubuntu-22.04-live-server-amd64.iso.torrent > test.torrent
Beachten Sie, dass Sie hier auch die Option -o verwenden können.
-o, --output <file> Write output to <file> instead of stdout.
Um auf unser Beispiel zurückzukommen, während die Daten in der Datei ‚test.torrent‘ auf meinem System heruntergeladen wurden, wurde die folgende Ausgabe auf der Befehlszeile erzeugt:
Um stattdessen einen Fortschrittsbalken (show activity) zu erhalten, verwenden Sie den zusätzlichen parameter -#:
curl -# https://releases.ubuntu.com/22.04/ubuntu-22.04-live-server-amd64.iso.torrent > test.torrent
Hier ist, was die Manpage über diesen Fortschrittsmesser sagt, der in der Ausgabe angezeigt wird:
curl normally displays a progress meter during operations, indicating the amount of transferred data, transfer speeds and estimated time left, etc. curl displays this data to the terminal by default, so if you invoke curl to do an operation and it is about to write data to the terminal, it disables the progress meter as otherwise it would mess up the output mixing progress meter and response data. If you want a progress meter for HTTP POST or PUT requests, you need to redirect the response output to a file, using shell redirect (>), -o [file] or similar. It is not the same case for FTP upload as that operation does not spit out any response data to the terminal. If you prefer a progress "bar" instead of the regular meter, -# is your friend.
Der curl Befehl kann natürlich auch wie jedes andere Linux Kommandozeilen Programm innerhalb eines Bash Script verwendet werden.
Q2. Wie kann man Curl dazu bringen, den gleichen Dateinamen für die Downloaddatei zu verwenden?
Im vorherigen Beispiel mussten wir den Namen der heruntergeladenen Datei explizit angeben. Wenn Sie möchten, können Sie jedoch erzwingen, dass curl den Namen der heruntergeladenen Datei als lokalen Dateinamen verwendet. Dies kann mit der Kommandozeilenoption -O erfolgen.
curl -O https://releases.ubuntu.com/22.04/ubuntu-22.04-live-server-amd64.iso.torrent
In diesem Fall wurde also in der Ausgabe auf meinem System eine Datei namens’ubuntu-18.04-desktop-amd64.iso.torrent‘ erzeugt.
Q3. Wie kann man mehrere Dateien mit Curl herunterladen?
Das ist auch nicht kompliziert – übergeben Sie die URLs einfach wie folgt:
curl -O [URL1] -O [URL2] -O [URL3] ...
Zum Beispiel:
curl -O https://releases.ubuntu.com/22.04/ubuntu-22.04-live-server-amd64.iso.torrent -O https://releases.ubuntu.com/22.04/ubuntu-22.04-live-desktop-amd64.iso.torrent
Hier ist der obige Befehl in Aktion:
So können Sie den Fortschritt des Downloads für beide URLs sehen, der in der Ausgabe angezeigt wurde.
Q4. Wie kann man das – 301 Moved Permamnently Problem – lösen?
Manchmal, wenn Sie eine URL an den Befehl curl übergeben, erhalten Sie Fehler wie „Verschieben“ oder „Dauerhaft verschoben“. Dies geschieht in der Regel, wenn die Eingabe-URL auf eine andere URL umgeleitet wird. Wenn Sie beispielsweise eine Website mit der Aufschrift oneplus.com öffnen, wird sie auf eine URL für Ihr Heimatland (wie oneplus.in) umgeleitet, so dass Sie einen Fehler wie den folgenden erhalten:
Wenn Sie möchten, dass die Locken dem Redirect folgen, verwenden Sie stattdessen die Kommandozeilenoption -L.
curl -L http://www.google.com
Q5. Wie kann man einen Download ab dem Zeitpunkt der Unterbrechung fortsetzen?
Manchmal wird ein Download zwischendurch unterbrochen. Also natürlich, um Zeit und Daten zu sparen, wenn Sie es erneut versuchen. Sie können wünschen, dass es an der Stelle beginnt, an der es unterbrochen wurde. Curl ermöglicht es Ihnen, dies mit der Kommandozeilenoption -C zu tun.
Zum Beispiel:
curl -C - -O https://releases.ubuntu.com/22.04/ubuntu-22.04-live-server-amd64.iso
Der folgende Screenshot zeigt den Curl-Befehl, der den Download fortsetzt, abhängig vom content type, nachdem er unterbrochen wurde.
Q6. Wie kann ich den Content-Type beim Curl POST Aufruf vorgeben
Curl kann man mittels des parameters -H einen HTTP-Header wie z.B. accept application json vorgeben. Im folgenden Beispiel wird ein POST request mit Content-Type application/json versendet und der API mitgeteilt dass man due Antwort auch im json Format erhalten möchte:
curl -X POST https://example.com/json/api -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{"Vorname": "Tom", "Nachname": "Meyer"}'
Fazit
Sie können also sehen, dass der Befehl curl in Ubuntu ein nützliches Dienstprogramm ist, wenn Sie Dinge über die Befehlszeile herunterladen möchten. Wir haben hier nur die Oberfläche verkratzt, da das Werkzeug viel mehr Funktionen bietet. Sobald Sie mit dem Üben der in diesem Tutorial beschriebenen Befehlszeilenoptionen fertig sind, können Sie auf die Handbuchseite von curl gehen, um mehr darüber zu erfahren.