Använd cURL för att hämta fjärrfiler från kommandoraden

Det kraftfulla kommandoradsverktyget kan användas för att ladda ner filer från nästan vilken fjärrserver som helst. Longtime kommandoradsanvändare vet att det här kan vara användbart för en mängd olika situationer, men för att hålla saker enkelt, kommer många att upptäcka att nedladdning av en fil med curl ofta kan vara ett snabbare alternativ till att använda en webbläsare eller FTP-klient från GUI-sidan av OS X (eller Linux). Det här är användbart för lokala situationer, men det är speciellt värde om du befinner dig i en situation där du behöver ladda ner något till en avlägsen Mac när du är ansluten via SSH.

I detta genomgång fokuserar vi främst på nedladdning av filer från de två vanliga HTTP- och SFTP-protokollen, men det bör noteras att cURL stöder många fler protokoll. Även om curl är lätt att använda, rekommenderas att ha lite kunskap om kommandoraden.

Hämta exakta matchfiler med curl -O

Med hjälp av stor bokstäver -O flagga med curl hämtas filen från fjärrservern medan det exakta filnamnet bibehålls, den grundläggande syntaxen för detta är följande:

curl -O [url]

Det betyder att om den angivna webbadressen heter "sample.zip" kommer den att hämtas med filnamnet "sample.zip", och om filen heter något enormt och komplicerat som "LongExampleFileNameForOSXDaily-v-1-3-51-revision- 515b12-readme.txt "på fjärrservern, kommer den att spara med det exakta namnet på den lokala maskinen. Längre filnamn hanteras ofta bättre med -o-flaggan istället för -O, som vi kommer att adressera inom kort.

Vanliga läsare kan komma ihåg att vi använde kommandot curl -O när vi förklarade hur man extraherar det faktiska ljudinnehållet från en m3u-streamingfil.

Början av nedladdning med curl visar procenten överförd, tid spenderad nedladdning och återstående tid och överföringshastigheten.

Skärmbilden ger en bättre representation än det klistrade exemplet nedan, men det ser något ut så här ut:

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 10505 100 10505 0 0 79741 0 --:--:-- --:--:-- --:--:-- 142k

Med överföringshastighet som visar att du kan omdirigera utmatningen från curl till / dev / null och använda den för att testa internetanslutningshastighet, men wget-kommandot har en lättare att läsa och följ överföringsfältet så är wget bättre lämpat för den uppgiften.

Spara en fjärrfil med ett annat namn med curl -o

Med hjälp av en liten bokstav -o flaggan kan du ange ett annat filnamn för den nedladdade filen än hur den heter på fjärrservern. Detta kan vara till hjälp för att reducera långa filnamn eller bara märka något så att det är lättare att hitta på egen hand. Den allmänna syntaxen skulle vara:

curl -o [shortname] [url]

Om du till exempel vill spara en iOS IPSW-fil som du hittade listad på Apples servrar utan att ha det långa fullständiga namnet, kan du använda följande:

curl -o iPhone5C-704.ipsw http://appldnld.apple.com/iOS7/031-1828.20131114.P3wE4/iPhone5, 3_7.0.4_11B554a_Restore.ipsw

Detta hämtar filen "iPhone5, 3_7.0.4_11B554a_Restore.ipsw" men heter kortare som den mer meningsfulla "iPhone5C-704.ipsw".

Om du hellre inte vill spara filen i den nuvarande arbetsmappen, ange en sökväg som en del av filnamnet som så:

curl -o ~/Desktop/localexample.dmg http://url-to-file/example.dmg

Hämtar flera filer samtidigt med curl

cURL kan enkelt ladda ner flera filer samtidigt, allt du behöver göra är att ange mer än en webbadress så här:

curl -O [URL 1] [URL 2] [URL 3]

För filer med olika namn eller värd på olika servrar, eller inom olika katalogvägar, använd den fullständiga webbadressen, till exempel:

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

Å andra sidan, om filnamnen som ska hämtas använder stegvis namngivning, kan du använda parentes för att ange ett hämtningsintervall, som så:

curl -O http://ftp.gnu.org/gnu/Licenses/fd1-1[1-3].txt

Detta skulle ta tag i filerna fdl-1.1.txt, fd1-1.2.txt och fd1-1.3.txt alla samtidigt utan att behöva ange varje unik URL. Självklart fungerar det bara om filerna är i samma katalog tillsammans och på samma domän.

Autentisering med curl

Du kan också godkänna autentisering med cURL genom att använda -u-flaggan:

curl -u user:pass -O ftp://remote_url/file-to-download.zip

Tänk på att bash-historiken lagrar lösenordet i vanlig text när du använder -u med ett användarnamn och lösenord som anges. Därför rekommenderas det inte för de flesta situationer. Du kan komma runt det genom att placera ett utrymme framför "curl". Om du inte använder mellanslagstangenten för att prefixera kommandot, kommer du förmodligen att tömma kommandoboken efteråt för att vara säker.

Stödda protokoll och användning utöver HTTP och FTP

Som tidigare nämnts går cURL-användningen långt bortom HTTP och FTP, eftersom den manuella sidaninmatningen om kretsar nämner ytterligare protokoll i beskrivningen:

curl är ett verktyg för att överföra data från eller till en server, med hjälp av en av
protokoll (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP,
IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS,
TELNET och TFTP).

Dessutom finner du att curl också kan användas för PUT- och POST-förfrågningar, cookies, proxyer, tunnlar, återuppta nedladdningar, och till och med få tag i HTTP-headerinformation eller byta användaragent (effektivt spoofing) utan att behöva använda en dedikerad web webbläsare.

Precis som de flesta kommandoradsverktygen kan du lära dig mycket mer om curl genom att kalla den lämpliga mansidan med kommandot "man curl".