Cara Menggunakan curl untuk Mengunduh File Dari Baris Perintah Linux
curl
Perintah Linux dapat melakukan lebih dari sekadar mengunduh file. Cari tahu apa curl
yang mampu, dan kapan Anda harus menggunakannya sebagai pengganti wget
.
curl vs. wget: Apa Bedanya?
Orang sering kesulitan untuk mengidentifikasi kekuatan relatif dari perintah wget
dan curl
. Perintah memang memiliki beberapa fungsional yang tumpang tindih. Mereka masing-masing dapat mengambil file dari lokasi yang jauh, tetapi di situlah kesamaan berakhir.
wget
adalah alat yang luar biasa untuk mengunduh konten dan file. Itu dapat mengunduh file, halaman web, dan direktori. Ini berisi rutinitas cerdas untuk melintasi tautan di halaman web dan mengunduh konten secara rekursif di seluruh situs web. Itu tak tertandingi sebagai pengelola unduhan baris perintah.
curl
memenuhi kebutuhan yang sama sekali berbeda. Ya, ini dapat mengambil file, tetapi tidak dapat secara rekursif menavigasi situs web yang mencari konten untuk diambil. Apa yang curl
sebenarnya dilakukan adalah memungkinkan Anda berinteraksi dengan sistem jarak jauh dengan membuat permintaan ke sistem tersebut, dan mengambil serta menampilkan tanggapan mereka kepada Anda. Respons tersebut mungkin saja konten dan file halaman web, tetapi mereka juga dapat berisi data yang disediakan melalui layanan web atau API sebagai hasil dari "pertanyaan" yang diajukan oleh permintaan curl.
Dan curl
tidak terbatas pada situs web. curl
mendukung lebih dari 20 protokol, termasuk HTTP, HTTPS, SCP, SFTP, dan FTP. Dan bisa dibilang, karena penanganan pipa Linux yang superior, curl
dapat lebih mudah diintegrasikan dengan perintah dan skrip lain.
Penulis curl
memiliki halaman web yang menjelaskan perbedaan yang dilihatnya antara curl
dan wget
.
Memasang curl
Dari komputer yang digunakan untuk meneliti artikel ini, Fedora 31 dan Manjaro 18.1.0 telah curl
diinstal. curl
harus diinstal pada Ubuntu 18.04 LTS. Di Ubuntu, jalankan perintah ini untuk menginstalnya:
sudo apt-get install curl
Versi curl
The --version
merek pilihan curl
melaporkan versi. Itu juga mencantumkan semua protokol yang didukungnya.
curl --version
Mengambil Halaman Web
Jika kita menunjuk curl
ke halaman web, itu akan mengambilnya untuk kita.
curl //www.bbc.com
Tetapi tindakan defaultnya adalah membuangnya ke jendela terminal sebagai kode sumber.
Hati-hati : Jika Anda tidak memberi tahu curl
Anda ingin sesuatu disimpan sebagai file, itu akan selalu membuangnya ke jendela terminal. Jika file yang diambil adalah file biner, hasilnya tidak dapat diprediksi. Shell mungkin mencoba menafsirkan beberapa nilai byte dalam file biner sebagai karakter kontrol atau urutan pelolosan.
Menyimpan Data ke File
Mari beri tahu curl untuk mengarahkan output ke file:
curl //www.bbc.com> bbc.html
Kali ini kami tidak melihat informasi yang diambil, itu dikirim langsung ke file untuk kami. Karena tidak ada keluaran jendela terminal untuk ditampilkan, curl
keluaran satu set informasi kemajuan.
Ini tidak melakukan ini pada contoh sebelumnya karena informasi kemajuan akan tersebar di seluruh kode sumber halaman web, jadi curl
secara otomatis menyembunyikannya.
Dalam contoh ini, curl
mendeteksi bahwa keluaran sedang diarahkan ke file dan aman untuk menghasilkan informasi kemajuan.
Informasi yang diberikan adalah:
- % Total : Jumlah total yang akan diambil.
- % Diterima : Persentase dan nilai aktual dari data yang diambil sejauh ini.
- % Xferd : Persen dan aktual terkirim, jika data sedang diunggah.
- Average Speed Dload : Kecepatan unduh rata-rata.
- Kecepatan Unggah Rata-rata: Kecepatan unggah rata-rata.
- Total Waktu : Perkiraan durasi total transfer.
- Waktu yang Dihabiskan : Waktu yang telah berlalu sejauh ini untuk transfer ini.
- Waktu Tersisa : Perkiraan waktu tersisa untuk penyelesaian transfer
- Kecepatan Saat Ini : Kecepatan transfer saat ini untuk transfer ini.
Karena kami mengalihkan keluaran dari curl
ke file, kami sekarang memiliki file bernama "bbc.html."
Mengklik dua kali file itu akan membuka browser default Anda sehingga menampilkan halaman web yang diambil.
Perhatikan bahwa alamat di bilah alamat browser adalah file lokal di komputer ini, bukan situs web jarak jauh.
Kami tidak perlu mengarahkan output untuk membuat file. Kita dapat membuat file dengan menggunakan opsi -o
(output), dan memberi tahu curl
untuk membuat file. Di sini kami menggunakan -o
opsi dan memberikan nama file yang ingin kami buat "bbc.html."
curl -o bbc.html //www.bbc.com
Using a Progress Bar To Monitor Downloads
To have the text-based download information replaced by a simple progress bar, use the -#
(progress bar) option.
curl -x -o bbc.html //www.bbc.com
Restarting an Interrupted Download
It is easy to restart a download that has been terminated or interrupted. Let’s start a download of a sizeable file. We’ll use the latest Long Term Support build of Ubuntu 18.04. We’re using the --output
option to specify the name of the file we wish to save it into: “ubuntu180403.iso.”
curl --output ubuntu18043.iso //releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso
The download starts and works its way towards completion.
If we forcibly interrupt the download with Ctrl+C
, we’re returned to the command prompt, and the download is abandoned.
To restart the download, use the -C
(continue at) option. This causes curl
to restart the download at a specified point or offset within the target file. If you use a hyphen -
as the offset, curl
will look at the already downloaded portion of the file and determine the correct offset to use for itself.
curl -C - --output ubuntu18043.iso //releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso
The download is restarted. curl
reports the offset at which it is restarting.
Retrieving HTTP headers
With the -I
(head) option, you can retrieve the HTTP headers only. This is the same as sending the HTTP HEAD command to a web server.
curl -I www.twitter.com
This command retrieves information only; it does not download any web pages or files.
Downloading Multiple URLs
Using xargs
we can download multiple URLs at once. Perhaps we want to download a series of web pages that make up a single article or tutorial.
Copy these URLs to an editor and save it to a file called “urls-to-download.txt.” We can use xargs
to treat the content of each line of the text file as a parameter which it will feed to curl
, in turn.
//tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#0 //tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#1 //tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#2 //tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#3 //tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#4 //tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#5
This is the command we need to use to have xargs
pass these URLs to curl
one at a time:
xargs -n 1 curl -O < urls-to-download.txt
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.
RELATED:How to Use the xargs Command on Linux
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
figures out that we’re pointing it at an FTP server, and returns a list of the files that are present on the server.
The only file on this server is a “readme.txt” file, of 403 bytes in length. Let’s retrieve it. Use the same command as a moment ago, with the filename appended to it:
curl -u demo:password ftp://test.rebex.net/readme.txt
The file is retrieved and curl
displays its contents in the terminal window.
In almost all cases, it is going to be more convenient to have the retrieved file saved to disk for us, rather than displayed in the terminal window. Once more we can use the -O
(remote file) output command to have the file saved to disk, with the same filename that it has on the remote server.
curl -O -u demo:password ftp://test.rebex.net/readme.txt
The file is retrieved and saved to disk. We can use ls
to check the file details. It has the same name as the file on the FTP server, and it is the same length, 403 bytes.
ls -hl readme.txt
RELATED:How to Use the FTP Command on Linux
Sending Parameters to Remote Servers
Some remote servers will accept parameters in requests that are sent to them. The parameters might be used to format the returned data, for example, or they may be used to select the exact data that the user wishes to retrieve. It is often possible to interact with web application programming interfaces (APIs) using curl
.
As a simple example, the ipify website has an API can be queried to ascertain your external IP address.
curl //api.ipify.org
By adding the format
parameter to the command, with the value of “json” we can again request our external IP address, but this time the returned data will be encoded in the JSON format.
curl //api.ipify.org?format=json
Here’s another example that makes use of a Google API. It returns a JSON object describing a book. The parameter you must provide is the International Standard Book Number (ISBN) number of a book. You can find these on the back cover of most books, usually below a barcode. The parameter we’ll use here is “0131103628.”
curl //www.googleapis.com/books/v1/volumes?q=isbn:0131103628
The returned data is comprehensive:
Sometimes curl, Sometimes wget
If I wanted to download content from a website and have the tree-structure of the website searched recursively for that content, I’d use wget
.
If I wanted to interact with a remote server or API, and possibly download some files or web pages, I’d use curl
. Especially if the protocol was one of the many not supported by wget
.