Mit cURL Remote-Dateien von der Befehlszeile herunterladen
Mit dem leistungsstarken Befehlszeilenprogramm curl können Dateien von nahezu jedem Remote-Server heruntergeladen werden. Langjährige Benutzer der Befehlszeile wissen, dass dies für eine Vielzahl von Situationen nützlich sein kann, aber um die Dinge einfach zu halten, finden viele, dass das Herunterladen einer Datei mit curl eine schnellere Alternative zur Verwendung eines Webbrowsers oder FTP-Clients von der GUI-Seite sein kann OS X (oder Linux). Dies ist hilfreich für lokale Situationen, aber es ist von besonderem Wert, wenn Sie sich in einer Situation befinden, in der Sie etwas herunterladen müssen, wenn Sie über SSH verbunden sind.
Im Rahmen dieser exemplarischen Vorgehensweise konzentrieren wir uns hauptsächlich auf das Herunterladen von Dateien aus den beiden häufig vorkommenden HTTP- und SFTP-Protokollen. Es sollte jedoch beachtet werden, dass cURL wesentlich mehr Protokolle unterstützt. Obwohl curl einfach zu verwenden ist, wird empfohlen, die Befehlszeile zu kennen.
Laden Sie Exact Match Files mit curl -O herunter
Wenn Sie das Großbuchstabe -O-Flag mit curl verwenden, wird die Datei vom Remote-Server heruntergeladen, während der genaue Dateiname beibehalten wird. Die grundlegende Syntax hierfür lautet wie folgt:
curl -O [url]
Das heißt, wenn die angegebene URL-Datei den Namen "sample.zip" hat, wird sie mit dem Dateinamen "sample.zip" heruntergeladen, und wenn die Datei so etwas wie "LongExampleFileNameForOSXDaily-v-1-3-51-revision- 515b12-readme.txt "auf dem Remote-Server speichert es mit genau diesem Namen auf dem lokalen Rechner. Längere Dateinamen werden oft besser mit dem -o-Flag als -O behandelt, auf das wir gleich eingehen werden.
Regelmäßige Leser erinnern sich vielleicht daran, dass wir den Befehl curl -O verwendet haben, um zu erklären, wie der tatsächliche Audioinhalt aus einer m3u-Streaming-Datei extrahiert wird.
Wenn Sie einen Download mit curl starten, werden der übertragene Prozentsatz, die Zeit für das Herunterladen und die verbleibende Zeit sowie die Übertragungsgeschwindigkeit angezeigt.
Der Screenshot bietet eine bessere Darstellung als das folgende Beispiel, sieht aber ungefähr so aus:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 10505 100 10505 0 0 79741 0 --:--:-- --:--:-- --:--:-- 142k
Mit der Übertragungsgeschwindigkeit können Sie die Ausgabe von curl nach / dev / null umleiten und verwenden, um die Internetverbindungsgeschwindigkeit zu testen, aber der wget-Befehl hat eine leichter zu lesende und zu befolgende Übertragungsleiste, daher ist wget für diese Aufgabe besser geeignet.
Speichern einer Remote-Datei unter einem anderen Namen mit curl -o
Wenn Sie ein Kleinbuchstabe -o verwenden, können Sie einen anderen Dateinamen für die heruntergeladene Datei angeben als den Namen auf dem Remote-Server. Dies kann hilfreich sein, um lange Dateinamen zu reduzieren oder einfach nur etwas zu beschriften, so dass es einfacher ist, es selbst zu finden. Die allgemeine Syntax wäre:
curl -o [shortname] [url]
Wenn Sie beispielsweise eine iOS-IPSW-Datei speichern möchten, die auf Apple-Servern aufgeführt ist, ohne den vollständigen vollständigen Namen zu haben, könnten Sie Folgendes verwenden:
curl -o iPhone5C-704.ipsw http://appldnld.apple.com/iOS7/031-1828.20131114.P3wE4/iPhone5, 3_7.0.4_11B554a_Restore.ipsw
Dies wird die Datei "iPhone5, 3_7.0.4_11B554a_Restore.ipsw" herunterladen, aber kürzer als die aussagekräftigere "iPhone5C-704.ipsw" benannt.
Wenn Sie die Datei nicht im aktuellen Arbeitsverzeichnis speichern möchten, geben Sie einen Pfad als Teil des Dateinamens an:
curl -o ~/Desktop/localexample.dmg http://url-to-file/example.dmg
Herunterladen mehrerer Dateien gleichzeitig mit curl
cURL kann problemlos mehrere Dateien gleichzeitig herunterladen, Sie müssen lediglich mehr als eine URL angeben:
curl -O [URL 1] [URL 2] [URL 3]
Verwenden Sie für Dateien mit unterschiedlichen Namen oder auf verschiedenen Servern oder in verschiedenen Verzeichnispfaden die vollständige URL, z.
curl -O http://ftp.gnu.org/gnu/Licenses/fdl-1.1.txt http://ftp.gnu.org/gnu/Licenses/lgpl-2.1.txt http://ftp.gnu.org/gnu/GNUinfo/Audio/index.txt
Wenn die zu ladenden Dateinamen jedoch eine inkrementelle Benennung verwenden, können Sie mit eckigen Klammern einen Download-Bereich angeben:
curl -O http://ftp.gnu.org/gnu/Licenses/fd1-1[1-3].txt
Dies würde die Dateien fdl-1.1.txt, fd1-1.2.txt und fd1-1.3.txt gleichzeitig erfassen, ohne jede eindeutige URL angeben zu müssen. Dies funktioniert natürlich nur, wenn sich die Dateien im selben Verzeichnis und in derselben Domäne befinden.
Authentifizieren mit Curl
Sie können die Authentifizierung mit cURL auch mit dem Flag -u übergeben:
curl -u user:pass -O ftp://remote_url/file-to-download.zip
Beachten Sie, dass in der Bash-History das Passwort im Klartext gespeichert wird, wenn -u mit einem angegebenen Benutzernamen und Passwort verwendet wird. Dies wird für die meisten Situationen nicht empfohlen. Sie können das umgehen, indem Sie einen Platz vor "curl" platzieren. Wenn Sie die Leertaste nicht zum Präfix des Befehls verwenden, sollten Sie den Befehlshistorie später leeren, um sicherzugehen.
Unterstützte Protokolle und Verwendung über HTTP & FTP hinaus
Wie bereits erwähnt, geht cURL weit über HTTP und FTP hinaus, da der Eintrag curl manual page zusätzliche Protokolle in der Beschreibung erwähnt:
curl ist ein Werkzeug, um Daten von oder zu einem Server zu übertragen, mit einem der
unterstützte Protokolle (DICT, DATEI, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP,
IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS,
TELNET und TFTP).
Darüber hinaus finden Sie, dass curl auch für PUT- und POST-Anfragen, Cookies, Proxies, Tunnel, Downloads und sogar für das Erfassen von HTTP-Header-Informationen oder das Ändern eines User Agents (effektives Spoofing) verwendet werden kann, ohne dass ein dediziertes Web benötigt wird Browser.
Wie bei den meisten Befehlszeilendienstprogrammen können Sie viel mehr über das Curl erfahren, indem Sie die entsprechende Manpage mit dem Befehl 'man curl' aufrufen.