Πώς να χρησιμοποιήσετε το curl για λήψη αρχείων από τη γραμμή εντολών του Linux

Η εντολή curl Linux μπορεί να κάνει πολλά περισσότερα από τη λήψη αρχείων. Μάθετε τι μπορεί να κάνει το curl και πότε πρέπει να το χρησιμοποιήσετε αντί για το wget.

curl εναντίον wget : Ποια είναι η διαφορά;

Οι άνθρωποι συχνά δυσκολεύονται να αναγνωρίσουν τις σχετικές δυνάμεις των εντολών wget και curl. Οι εντολές έχουν κάποια λειτουργική επικάλυψη. Μπορούν το καθένα να ανακτήσει αρχεία από απομακρυσμένες τοποθεσίες, αλλά εκεί τελειώνει η ομοιότητα.

Το wget είναι α φανταστικό εργαλείο για τη λήψη περιεχομένου και αρχείων. Μπορεί να κατεβάσει αρχεία, ιστοσελίδες και καταλόγους. Περιέχει έξυπνες ρουτίνες για τη διέλευση συνδέσμων σε ιστοσελίδες και την αναδρομική λήψη περιεχομένου σε έναν ολόκληρο ιστότοπο. Είναι αξεπέραστος ως διαχειριστής λήψης γραμμής εντολών.

μπούκλα ικανοποιεί μια εντελώς διαφορετική ανάγκη. Ναι, μπορεί να ανακτήσει αρχεία, αλλά δεν μπορεί να περιηγηθεί αναδρομικά σε έναν ιστότοπο αναζητώντας περιεχόμενο προς ανάκτηση. Αυτό που κάνει στην πραγματικότητα το curl είναι να σας επιτρέπει να αλληλεπιδράτε με απομακρυσμένα συστήματα υποβάλλοντας αιτήματα σε αυτά τα συστήματα και ανακτώντας και εμφανίζοντας τις απαντήσεις τους σε εσάς. Αυτές οι απαντήσεις μπορεί κάλλιστα να είναι περιεχόμενο και αρχεία ιστοσελίδων, αλλά μπορεί επίσης να περιέχουν δεδομένα που παρέχονται μέσω μιας υπηρεσίας ιστού ή API ως αποτέλεσμα της «ερώτησης» που τίθεται από το αίτημα περιστροφής.

Και το curl δεν περιορίζεται σε ιστότοπους. Το curl υποστηρίζει περισσότερα από 20 πρωτόκολλα, συμπεριλαμβανομένων των HTTP, HTTPS, SCP, SFTP και FTP. Και αναμφισβήτητα, λόγω του ανώτερου χειρισμού των σωλήνων Linux, το curl μπορεί να ενσωματωθεί πιο εύκολα με άλλες εντολές και σενάρια.

Ο συγγραφέας του curl έχει μια ιστοσελίδα που περιγράφει τις διαφορές που βλέπει μεταξύ curl και wget.

Τοποθέτηση μπούκλας

Από τους υπολογιστές που χρησιμοποιήθηκαν για την έρευνα αυτού του άρθρου, το Fedora 31 και το Manjaro 18.1.0 είχαν ήδη εγκαταστήσει το curl. Το curl έπρεπε να εγκατασταθεί στο Ubuntu 18.04 LTS. Στο Ubuntu, εκτελέστε αυτήν την εντολή για να το εγκαταστήσετε:

sudo apt-get install curl

Η έκδοση curl

Η επιλογή –version κάνει την curlreport την έκδοσή της. Επίσης, παραθέτει όλα τα πρωτόκολλα που υποστηρίζει.

curl --version

Ανάκτηση ιστοσελίδας

Αν δείξουμε το curl σε μια ιστοσελίδα, θα την ανακτήσει για εμάς.

curl https://www.bbc.com

Αλλά η προεπιλεγμένη του δράση είναι να το απορρίψει στο παράθυρο του τερματικού ως πηγαίο κώδικα.

  Πώς να ρυθμίσετε και να χρησιμοποιήσετε το Fragments BitTorrent Client στο Linux

Προσοχή: Εάν δεν πείτε στον curl ότι θέλετε κάτι να αποθηκευτεί ως αρχείο, θα το απορρίπτει πάντα στο παράθυρο του τερματικού. Εάν το αρχείο που ανακτά είναι δυαδικό αρχείο, το αποτέλεσμα μπορεί να είναι απρόβλεπτο. Το κέλυφος μπορεί να προσπαθήσει να ερμηνεύσει ορισμένες από τις τιμές byte στο δυαδικό αρχείο ως χαρακτήρες ελέγχου ή ακολουθίες διαφυγής.

Αποθήκευση δεδομένων σε αρχείο

Ας πούμε στον curl να ανακατευθύνει την έξοδο σε ένα αρχείο:

curl https://www.bbc.com  > bbc.html

κουμπώστε https://www.bbc.com > bbc.html σε ένα παράθυρο τερματικού” width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Αυτή τη φορά δεν βλέπουμε τις ανακτηθείσες πληροφορίες, αποστέλλονται απευθείας στο αρχείο για εμάς.  Επειδή δεν υπάρχει έξοδος παραθύρου τερματικού για εμφάνιση, το curl εξάγει ένα σύνολο πληροφοριών προόδου.</p>
<p>Αυτό δεν έγινε στο προηγούμενο παράδειγμα επειδή οι πληροφορίες προόδου θα ήταν διάσπαρτες στον πηγαίο κώδικα της ιστοσελίδας, οπότε το curl το κατέστειλε αυτόματα.</p>
<p>Σε αυτό το παράδειγμα, το curl εντοπίζει ότι η έξοδος ανακατευθύνεται σε ένα αρχείο και ότι είναι ασφαλές να δημιουργηθούν οι πληροφορίες προόδου.</p>
<p><img loading=

Οι πληροφορίες που παρέχονται είναι:

% Σύνολο: Το συνολικό ποσό που πρέπει να ανακτηθεί.
% Λήφθηκαν: Το ποσοστό και οι πραγματικές τιμές των δεδομένων που έχουν ανακτηθεί μέχρι στιγμής.
% Xferd: Το ποσοστό και η πραγματική αποστολή, εάν γίνεται αποστολή δεδομένων.
Μέση ταχύτητα Dload: Η μέση ταχύτητα λήψης.
Μέση ταχύτητα μεταφόρτωσης: Η μέση ταχύτητα μεταφόρτωσης.
Σύνολο χρόνου: Η εκτιμώμενη συνολική διάρκεια της μεταφοράς.
Χρόνος που δαπανήθηκε: Ο χρόνος που έχει παρέλθει μέχρι στιγμής για αυτήν τη μεταφορά.
Χρόνος που απομένει: Ο εκτιμώμενος χρόνος που απομένει για να ολοκληρωθεί η μεταφορά
Τρέχουσα ταχύτητα: Η τρέχουσα ταχύτητα μεταφοράς για αυτήν τη μεταφορά.

Επειδή ανακατευθύναμε την έξοδο από το curl σε ένα αρχείο, έχουμε τώρα ένα αρχείο που ονομάζεται “bbc.html”.

Κάνοντας διπλό κλικ σε αυτό το αρχείο θα ανοίξει το προεπιλεγμένο πρόγραμμα περιήγησής σας έτσι ώστε να εμφανίσει την ανακτημένη ιστοσελίδα.

Λάβετε υπόψη ότι η διεύθυνση στη γραμμή διευθύνσεων του προγράμματος περιήγησης είναι ένα τοπικό αρχείο σε αυτόν τον υπολογιστή και όχι ένας απομακρυσμένος ιστότοπος.

Δεν χρειάζεται να ανακατευθύνουμε την έξοδο για να δημιουργήσουμε ένα αρχείο. Μπορούμε να δημιουργήσουμε ένα αρχείο χρησιμοποιώντας την επιλογή -o (έξοδος) και λέγοντας στον curl να δημιουργήσει το αρχείο. Εδώ χρησιμοποιούμε την επιλογή -o και παρέχουμε το όνομα του αρχείου που θέλουμε να δημιουργήσουμε “bbc.html”.

curl -o bbc.html https://www.bbc.com

Χρήση γραμμής προόδου για παρακολούθηση λήψεων

Για να αντικαταστήσετε τις πληροφορίες λήψης βάσει κειμένου από μια απλή γραμμή προόδου, χρησιμοποιήστε την επιλογή -# (γραμμή προόδου).

curl -x -o bbc.html https://www.bbc.com

Επανεκκίνηση μιας διακοπείσας λήψης

Είναι εύκολο να επανεκκινήσετε μια λήψη που έχει τερματιστεί ή διακοπεί. Ας ξεκινήσουμε τη λήψη ενός μεγάλου αρχείου. Θα χρησιμοποιήσουμε την πιο πρόσφατη έκδοση Long Term Support του Ubuntu 18.04. Χρησιμοποιούμε την επιλογή –output για να καθορίσουμε το όνομα του αρχείου στο οποίο θέλουμε να το αποθηκεύσουμε: “ubuntu180403.iso”.

curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

Η λήψη ξεκινά και προχωρά προς την ολοκλήρωσή της.

  Πώς να παίξετε το Dead Rising στο Linux

Εάν διακόψουμε αναγκαστικά τη λήψη με Ctrl+C , επιστρέφουμε στη γραμμή εντολών και η λήψη εγκαταλείπεται.

Για να επανεκκινήσετε τη λήψη, χρησιμοποιήστε την επιλογή -C (συνέχεια στο). Αυτό προκαλεί το curl να επανεκκινήσει τη λήψη σε ένα καθορισμένο σημείο ή να μετατοπιστεί εντός του αρχείου προορισμού. Εάν χρησιμοποιείτε παύλα – ως μετατόπιση, το curl θα κοιτάξει το τμήμα του αρχείου που έχετε ήδη λάβει και θα καθορίσει τη σωστή μετατόπιση που θα χρησιμοποιηθεί για τον εαυτό του.

curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

Η λήψη επανεκκινείται. Το curl αναφέρει τη μετατόπιση με την οποία γίνεται επανεκκίνηση.

Ανάκτηση κεφαλίδων HTTP

Με την επιλογή -I (head), μπορείτε να ανακτήσετε μόνο τις κεφαλίδες HTTP. Αυτό είναι το ίδιο με την αποστολή του Εντολή HTTP HEAD σε διακομιστή web.

curl -I www.twitter.com

Αυτή η εντολή ανακτά μόνο πληροφορίες. δεν πραγματοποιεί λήψη ιστοσελίδων ή αρχείων.

Λήψη πολλών διευθύνσεων URL

Χρησιμοποιώντας xargs μπορούμε να κατεβάσουμε πολλά διευθύνσεις URL με τη μία. Ίσως θέλουμε να κατεβάσουμε μια σειρά από ιστοσελίδες που αποτελούν ένα μόνο άρθρο ή σεμινάριο.

Αντιγράψτε αυτές τις διευθύνσεις URL σε ένα πρόγραμμα επεξεργασίας και αποθηκεύστε τις σε ένα αρχείο που ονομάζεται “urls-to-download.txt”. Μπορούμε να χρησιμοποιήσουμε xargs για να επεξεργασία του περιεχομένου κάθε γραμμής του αρχείου κειμένου ως παράμετρος που θα τροφοδοτήσει για να κυρτώσει, με τη σειρά του.

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#0
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#1
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#2
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#3
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#4
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#5

Αυτή είναι η εντολή που πρέπει να χρησιμοποιήσουμε για να βάλουμε τα xargs να περνούν αυτές τις διευθύνσεις URL για να καμπυλώνουν μία κάθε φορά:

xargs -n 1 curl -O 

Note that this command uses the -O (remote file) output command, which uses an uppercase “O.” This option causes curl to save the retrieved  file with the same name that the file has on the remote server.

The -n 1 option tells xargs to treat each line of the text file as a single parameter.

When you run the command, you’ll see multiple downloads start and finish, one after the other.

Checking in the file browser shows the multiple files have been downloaded. Each one bears the name it had on the remote server.

Downloading Files From an FTP Server

Using curl with a File Transfer Protocol (FTP) server is easy, even if you have to authenticate with a username and password. To pass a username and password with curl use the -u (user) option, and type the username, a colon “:”, and the password. Don’t put a space before or after the colon.

This is a free-for-testing FTP server hosted by Rebex. The test FTP site has a pre-set username of “demo”, and the password is “password.” Don’t use this type of weak username and password on a production or “real” FTP server.

curl -u demo:password ftp://test.rebex.net

Το curl διαπιστώνει ότι το κατευθύνουμε σε έναν διακομιστή FTP και επιστρέφει μια λίστα με τα αρχεία που υπάρχουν στον διακομιστή.

Το μόνο αρχείο σε αυτόν τον διακομιστή είναι ένα αρχείο "readme.txt", μήκους 403 byte. Ας το ανακτήσουμε. Χρησιμοποιήστε την ίδια εντολή όπως πριν από λίγο, με το όνομα αρχείου προσαρτημένο σε αυτήν:

curl -u demo:password ftp://test.rebex.net/readme.txt

Το αρχείο ανακτάται και το curl εμφανίζει τα περιεχόμενά του στο παράθυρο του τερματικού.

Σχεδόν σε όλες τις περιπτώσεις, θα είναι πιο βολικό να αποθηκεύεται το ανακτηθέν αρχείο στο δίσκο για εμάς, αντί να εμφανίζεται στο παράθυρο του τερματικού. Για άλλη μια φορά μπορούμε να χρησιμοποιήσουμε την εντολή εξόδου -O (απομακρυσμένο αρχείο) για να αποθηκεύσουμε το αρχείο στο δίσκο, με το ίδιο όνομα αρχείου που έχει στον απομακρυσμένο διακομιστή.

curl -O -u demo:password ftp://test.rebex.net/readme.txt

Το αρχείο ανακτάται και αποθηκεύεται στο δίσκο. Μπορούμε να χρησιμοποιήσουμε το ls για να ελέγξουμε τις λεπτομέρειες του αρχείου. Έχει το ίδιο όνομα με το αρχείο στον διακομιστή FTP και έχει το ίδιο μήκος, 403 byte.

ls -hl readme.txt

Αποστολή παραμέτρων σε απομακρυσμένους διακομιστές

Ορισμένοι απομακρυσμένοι διακομιστές δέχονται παραμέτρους σε αιτήματα που τους αποστέλλονται. Οι παράμετροι μπορεί να χρησιμοποιηθούν για τη μορφοποίηση των επιστρεφόμενων δεδομένων, για παράδειγμα, ή μπορεί να χρησιμοποιηθούν για την επιλογή των ακριβών δεδομένων που επιθυμεί να ανακτήσει ο χρήστης. Είναι συχνά δυνατή η αλληλεπίδραση με τον ιστό διεπαφές προγραμματισμού εφαρμογών (API) με χρήση curl.

Ως απλό παράδειγμα, το ipify Ο ιστότοπος διαθέτει API μπορεί να ζητηθεί για να εξακριβωθεί η εξωτερική σας διεύθυνση IP.

curl https://api.ipify.org

Προσθέτοντας την παράμετρο format στην εντολή, με την τιμή "json" μπορούμε να ζητήσουμε ξανά την εξωτερική μας διεύθυνση IP, αλλά αυτή τη φορά τα δεδομένα που επιστρέφονται θα κωδικοποιηθούν στο Μορφή JSON.

curl https://api.ipify.org?format=json

Ακολουθεί ένα άλλο παράδειγμα που χρησιμοποιεί ένα API Google. Επιστρέφει ένα αντικείμενο JSON που περιγράφει ένα βιβλίο. Η παράμετρος που πρέπει να δώσετε είναι η Διεθνής Πρότυπος Αριθμός Βιβλίου (ISBN) αριθμός βιβλίου. Μπορείτε να τα βρείτε στο οπισθόφυλλο των περισσότερων βιβλίων, συνήθως κάτω από έναν γραμμωτό κώδικα. Η παράμετρος που θα χρησιμοποιήσουμε εδώ είναι "0131103628".

curl https://www.googleapis.com/books/v1/volumes?q=isbn:0131103628

Τα επιστρεφόμενα δεδομένα είναι πλήρη:

Μερικές φορές curl, Μερικές φορές wget

Αν ήθελα να κατεβάσω περιεχόμενο από έναν ιστότοπο και να αναζητηθεί αναδρομικά η δενδρική δομή του ιστότοπου για αυτό το περιεχόμενο, θα χρησιμοποιούσα το wget.

Αν ήθελα να αλληλεπιδράσω με έναν απομακρυσμένο διακομιστή ή API και ενδεχομένως να κατεβάσω ορισμένα αρχεία ή ιστοσελίδες, θα χρησιμοποιούσα το curl. Ειδικά αν το πρωτόκολλο ήταν ένα από τα πολλά που δεν υποστηρίζονταν από το wget.