Met behulp van cURL om externe bestanden te downloaden vanaf de opdrachtregel

Het krachtige curl-opdrachtregelhulpprogramma kan worden gebruikt om bestanden te downloaden van vrijwel elke externe server. Gebruikers van langdurige opdrachtregel weten dat dit nuttig kan zijn voor een breed scala van situaties, maar om het simpel te houden, zullen velen merken dat het downloaden van een bestand met krul vaak een sneller alternatief is voor het gebruik van een webbrowser of FTP-client van de GUI-kant van OS X (of linux). Dit is handig voor lokale situaties, maar er is vooral waarde als je in een situatie bent dat je iets moet downloaden naar een externe Mac wanneer je verbonden bent via SSH.

Voor deze walkthrough zullen we ons voornamelijk richten op het downloaden van bestanden van de twee veel voorkomende HTTP- en SFTP-protocollen, hoewel opgemerkt moet worden dat cURL veel meer protocollen ondersteunt. Hoewel krul gemakkelijk te gebruiken is, is enige kennis van de opdrachtregel aanbevolen.

Download Exact Match-bestanden met curl -O

Het gebruik van de hoofdletter -O-vlag met curl downloadt het bestand van de externe server terwijl de exacte bestandsnaam behouden blijft, de basissyntaxis hiervoor is de volgende:

curl -O [url]

Dit betekent dat als het opgegeven URL-bestand 'sample.zip' heet, het wordt gedownload met de bestandsnaam 'sample.zip' en als het bestand de naam 'hugeExplicitFormForForixDaily-v-1-3-51-revisie' heeft gekregen, iets enorm en gecompliceerd 515b12-readme.txt "op de externe server, zal het met die exacte naam op de lokale computer opslaan. Langere bestandsnamen worden vaak beter behandeld met de vlag -o in plaats van -O, die we binnenkort zullen behandelen.

Regelmatige lezers herinneren zich misschien dat we de opdracht curl-O gebruikten om uit te leggen hoe de feitelijke audiocontent uit een m3u-streamingbestand te extraheren.

Elke download met krul begint en toont het overgedragen percentage, de duur van het downloaden en de resterende tijd en de overdrachtssnelheid.

Het screenshot biedt een betere weergave dan het geplakte voorbeeld hieronder, maar het ziet er ongeveer zo uit:

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

Met overdrachtssnelheid die aangeeft dat je de uitvoer van curl naar / dev / null kunt omleiden en deze gebruiken om de verbindingssnelheid van het internet te testen, maar de wget-opdracht heeft een gemakkelijker te lezen en volgen overdrachtsbar, dus wget is beter geschikt voor die taak.

Een bestand op afstand opslaan met een andere naam met curl -o

Als u een vlag in een kleine letters gebruikt, kunt u een andere bestandsnaam opgeven voor het gedownloade bestand dan de naam op de externe server. Dit kan handig zijn om lange bestandsnamen te verkleinen of alleen iets te labelen, zodat u het gemakkelijker zelf kunt vinden. De algemene syntaxis zou zijn:

curl -o [shortname] [url]

Als u bijvoorbeeld een iOS IPSW-bestand wilt opslaan dat u op Apple-servers hebt vermeld zonder de lange volledige naam, kunt u het volgende gebruiken:

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

Hiermee wordt het bestand "iPhone5, 3_7.0.4_11B554a_Restore.ipsw" gedownload, maar korter genoemd als de meer betekenisvolle "iPhone5C-704.ipsw".

Als u het bestand liever niet in de huidige werkmap opslaat, geeft u als volgt een pad op als onderdeel van de bestandsnaam:

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

Downloaden van meerdere bestanden Gelijktijdig met krullen

cURL kan eenvoudig meerdere bestanden tegelijkertijd downloaden, alles wat u hoeft te doen is meer dan één URL opgeven, zoals:

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

Voor bestanden met verschillende namen of gehost op verschillende servers of binnen verschillende mappaden, gebruikt u de volledige URL, bijvoorbeeld:

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

Aan de andere kant, als de bestandsnamen die moeten worden gedownload gebruikmaken van incrementele naamgeving, kunt u haakjes gebruiken om een ​​downloadbereik op te geven, zoals:

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

Dit zou tegelijkertijd de bestanden fdl-1.1.txt, fd1-1.2.txt en fd1-1.3.txt grijpen zonder elke unieke URL te hoeven specificeren. Dit werkt natuurlijk alleen als de bestanden zich in dezelfde directory en bij hetzelfde domein bevinden.

Authenticatie met krul

U kunt ook verificatie met cURL doorgeven met de vlag -u:

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

Houd er rekening mee dat bash-geschiedenis het wachtwoord in platte tekst opslaat wanneer u -u gebruikt met een gebruikersnaam en wachtwoord, dus dit wordt in de meeste situaties niet aanbevolen. Je kunt dat omzeilen door een spatie te plaatsen voor 'krullen'. Als u de spatiebalk niet gebruikt om het voorvoegsel te gebruiken, wilt u de opdrachthistorie waarschijnlijk later wissen om veilig te zijn.

Ondersteunde protocollen & gebruik Beyond HTTP & FTP

Zoals eerder vermeld, gaat het gebruik van cURL veel verder dan HTTP en FTP, aangezien het handmatige pagina-item voor krullen aanvullende protocollen vermeldt in de beschrijving:

krullen is een hulpmiddel om gegevens van of naar een server over te brengen, met behulp van een van de
ondersteunde protocollen (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP,
IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS,
TELNET en TFTP).

Bovendien zul je zien dat krul ook kan worden gebruikt voor PUT- en POST-verzoeken, cookies, proxy's, tunnels, downloads hervatten en zelfs HTTP-headerinformatie kan pakken of een user-agent kan wijzigen (effectief spoofen) zonder een speciaal web te hoeven gebruiken browser.

Net als bij de meeste opdrachtregelhulpprogramma's, kun je veel meer over krullen leren door de juiste manpagina op te roepen met de opdracht 'man curl'.