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:

So funktioniert der Curl-Befehl

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:

Wie man mehrere Dateien mit Curl herunterlädt

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:

Wie man das "verschobene" Problem löst

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.

So setzen Sie einen Download ab dem Zeitpunkt der Unterbrechung fort

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.

Das könnte dich auch interessieren …