Cara Mengunduh File dengan curl

curl adalah salah satu alat baris perintah paling serbaguna untuk mengunduh file melalui HTTP, HTTPS, FTP, dan puluhan protokol lainnya. Baik Anda perlu menyimpan satu respons API ke file atau mengotomatisasi unduhan batch dalam skrip shell, curl memiliki flag untuk itu. Panduan ini mencakup setiap opsi terkait unduhan — dari penyimpanan file dasar dengan -o dan -O hingga melanjutkan transfer yang terputus dengan -C -, membatasi bandwidth dengan --limit-rate, dan menampilkan progress bar. Setiap flag mencakup penjelasan yang jelas, pola penggunaan umum, dan contoh siap salin.

Referensi Cepat Flag Unduhan

-o

Tulis output ke file bernama tertentu alih-alih stdout

-O

Tulis output ke file dengan nama seperti file remote

-L

Ikuti redirect HTTP 3xx secara otomatis

-C -

Lanjutkan transfer file sebelumnya

--limit-rate

Batasi kecepatan transfer ke nilai yang ditentukan

--max-filesize

Tolak mengunduh file yang lebih besar dari ukuran yang ditentukan

-J

Gunakan header Content-Disposition untuk memberi nama file

-#

Tampilkan progress transfer sebagai progress bar sederhana

-u

Berikan username:password untuk autentikasi server

--retry

Coba ulang transfer pada error sementara (jumlah percobaan)

--retry-delay

Tunggu sekian detik antara percobaan ulang

-T

Unggah file lokal ke URL (PUT secara default)

--create-dirs

Buat direktori lokal sesuai kebutuhan saat menyimpan output

-s

Sembunyikan meter progress dan pesan error

--output-dir

Simpan file output di direktori yang ditentukan (curl 7.73+)

curl -o: Simpan ke Nama File Tertentu

Fungsinya
Flag -o (atau --output) memerintahkan curl untuk menyimpan body respons ke file yang Anda tentukan. Tanpa flag ini, curl mencetak respons ke stdout (terminal Anda). Anda dapat menggunakan nama file dan path apa pun — curl akan membuat file baru atau menimpa yang sudah ada.
Penggunaan umum
Gunakan -o saat Anda perlu mengontrol nama file yang tepat atau menyimpan ke direktori tertentu. Flag ini bekerja dengan protokol apa pun — HTTP, HTTPS, FTP, SFTP, dan lainnya. Kombinasikan dengan -L untuk menangani redirect dan -s untuk operasi senyap dalam skrip.
$ curl -o report.pdf https://example.com/files/report.pdf

curl -O: Simpan dengan Nama File Remote

Fungsinya
Flag -O (atau --remote-name) menyimpan file yang diunduh menggunakan nama file yang diekstrak dari URL. Misalnya, jika URL berakhiran /data.csv, curl membuat file bernama data.csv di direktori saat ini.
Penggunaan umum
Gunakan -O saat nama file remote sudah sesuai dan Anda tidak perlu mengubah namanya. Anda dapat memberikan beberapa flag -O untuk mengunduh beberapa file dalam satu perintah. Catatan: jika URL tidak berisi nama file (misalnya berakhiran /), curl akan gagal — gunakan -o sebagai gantinya.
$ curl -O https://example.com/files/data.csv

curl -L: Ikuti Redirect

Fungsinya
Flag -L (atau --location) membuat curl secara otomatis mengikuti redirect HTTP — 301 (Moved Permanently), 302 (Found), 307, dan 308. Tanpa -L, curl mengembalikan respons redirect itu sendiri alih-alih konten yang sebenarnya.
Penggunaan umum
Sebagian besar URL unduhan melakukan redirect setidaknya sekali (misalnya dari HTTP ke HTTPS, atau dari URL pendek ke file sebenarnya). Selalu kombinasikan -L dengan -o atau -O saat mengunduh file. Secara default curl mengikuti hingga 50 redirect; ubah ini dengan --max-redirs.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gz

curl -C -: Lanjutkan Unduhan yang Terputus

Fungsinya
Flag -C - (atau --continue-at -) memerintahkan curl untuk secara otomatis mendeteksi ukuran file parsial yang ada dan melanjutkan unduhan dari tempat terakhir berhenti. Server harus mendukung header HTTP Range agar ini berfungsi.
Penggunaan umum
Jika unduhan besar terputus karena masalah jaringan atau timeout, cukup jalankan ulang perintah yang sama dengan menambahkan -C -. curl akan mengirim header Range: bytes=OFFSET- dan hanya mengunduh data yang tersisa. Ini penting untuk file besar melalui koneksi yang tidak stabil.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zip

curl --limit-rate: Batasi Kecepatan Unduhan

Fungsinya
Flag --limit-rate membatasi kecepatan unduh (dan unggah) ke nilai yang ditentukan. Flag ini menerima sufiks: k atau K untuk kilobyte/s, m atau M untuk megabyte/s, g atau G untuk gigabyte/s.
Penggunaan umum
Gunakan --limit-rate untuk menghindari saturasi bandwidth saat mengunduh file besar, terutama pada koneksi bersama. Juga berguna untuk menguji bagaimana aplikasi Anda menangani respons lambat.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.iso

curl --max-filesize: Batalkan jika File Terlalu Besar

Fungsinya
Flag --max-filesize memerintahkan curl untuk membatalkan transfer jika ukuran file yang diharapkan (dari header Content-Length) melebihi batas yang ditentukan. Ukuran dapat menggunakan sufiks seperti k, M, G.
Penggunaan umum
Gunakan dalam skrip untuk mencegah unduhan besar yang tidak terduga menghabiskan ruang disk. Catatan: tidak semua server mengirim Content-Length — dalam kasus itu, curl tidak dapat menerapkan batas ini dan unduhan berlanjut secara normal.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bin

curl -J: Gunakan Nama File yang Disarankan Server

Fungsinya
Flag -J (atau --remote-header-name) memerintahkan curl untuk menggunakan nama file yang ditentukan dalam header Content-Disposition server alih-alih mengambilnya dari URL. Ini umum untuk API unduhan yang mengembalikan file dengan nama yang bermakna.
Penggunaan umum
Selalu kombinasikan -J dengan -O. Ini berguna saat URL adalah endpoint API (seperti /export?format=csv) tetapi server mengembalikan nama file yang tepat di header. Catatan keamanan: server mengontrol nama file, jadi gunakan hanya dengan server tepercaya.
$ curl -L -O -J https://example.com/api/export?format=csv

curl -#: Tampilkan Progress Bar

Fungsinya
Flag -# (atau --progress-bar) mengganti meter progress verbose default dengan progress bar ### sederhana. Ini lebih mudah dibaca untuk penggunaan interaktif.
Penggunaan umum
Gunakan -# saat mengunduh secara interaktif dan Anda ingin indikator progress yang bersih. Untuk skrip, gunakan -s (senyap) atau meter progress default. Output curl default sudah menampilkan kecepatan, persentase, waktu tersisa, dan ukuran total.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gz

Opsi Unduhan Tambahan

-u

Berikan username:password untuk autentikasi server

--retry

Coba ulang transfer pada error sementara (jumlah percobaan)

--retry-delay

Tunggu sekian detik antara percobaan ulang

-T

Unggah file lokal ke URL (PUT secara default)

--create-dirs

Buat direktori lokal sesuai kebutuhan saat menyimpan output

-s

Sembunyikan meter progress dan pesan error

--output-dir

Simpan file output di direktori yang ditentukan (curl 7.73+)

Skenario Unduhan Dunia Nyata

Contoh-contoh ini menggabungkan beberapa flag untuk menangani tugas unduhan umum yang akan Anda temui dalam pengembangan dan skripting sehari-hari.

Unduh Beberapa File Sekaligus

Gunakan beberapa flag -O untuk mengunduh beberapa file dalam satu perintah. curl memprosesnya secara berurutan. Untuk unduhan paralel, gunakan xargs atau GNU parallel.

$ curl -O https://example.com/file1.txt -O https://example.com/file2.txt -O https://example.com/file3.txt

Unduh dari Server FTP

curl mendukung FTP, FTPS, dan SFTP secara native. Tambahkan -u user:password untuk akses terautentikasi. Gunakan -O untuk mempertahankan nama file remote.

$ curl -u user:pass -o backup.sql ftp://ftp.example.com/db/backup.sql

Unduh dengan Autentikasi

Gunakan -u user:pass untuk Basic Auth, atau -H untuk mengirim Bearer token atau API key. Kombinasikan dengan -L dan -o untuk unduhan lengkap.

$ curl -H "Authorization: Bearer eyJhbGciOi..." -L -o data.json https://api.example.com/export

Unduhan Andal dengan Resume dan Retry

Kombinasikan -C - (lanjutkan), --retry (coba ulang otomatis saat gagal), dan -L (ikuti redirect) untuk unduhan yang tangguh yang bertahan dari gangguan jaringan.

$ curl -C - --retry 5 --retry-delay 10 -L -o largefile.zip https://cdn.example.com/largefile.zip

Pertanyaan yang Sering Diajukan tentang Unduhan dengan curl

Apa perbedaan antara curl -o dan curl -O?

-o namafile menyimpan unduhan ke nama file yang Anda tentukan. -O mengekstrak nama file dari URL dan menggunakannya. Gunakan -o saat Anda menginginkan nama atau path kustom; gunakan -O saat nama file remote sudah sesuai.

Mengapa curl mengunduh file kosong atau HTML alih-alih file yang sebenarnya?

URL kemungkinan mengembalikan redirect HTTP (301 atau 302). Secara default, curl menyimpan respons redirect itu sendiri — bukan konten akhir. Tambahkan -L untuk mengikuti redirect secara otomatis: curl -L -o file URL.

Bagaimana cara melanjutkan file yang terunduh sebagian dengan curl?

Gunakan curl -C - -o namafile URL. Flag -C - mendeteksi ukuran file yang ada dan mengirim header Range untuk meminta hanya byte yang tersisa. Server harus mendukung range request agar ini berfungsi.

Bagaimana cara membatasi kecepatan unduh di curl?

Gunakan --limit-rate dengan nilai dan sufiks: curl --limit-rate 500k -o file URL membatasi kecepatan di 500 KB/s. Sufiks: k (KB/s), M (MB/s), G (GB/s).

Bisakah curl mengunduh beberapa file sekaligus?

Ya. Gunakan beberapa flag -O: curl -O URL1 -O URL2 -O URL3. curl mengunduhnya secara berurutan. Untuk unduhan paralel, pipe daftar URL ke xargs -P 4 -I {} curl -O {}.

Bagaimana cara mengunduh file yang memerlukan autentikasi?

Untuk HTTP Basic Auth: curl -u user:pass -o file URL. Untuk Bearer token: curl -H "Authorization: Bearer TOKEN" -o file URL. Untuk API key di header: curl -H "X-API-Key: KEY" -o file URL.

Bagaimana cara mengunduh file dari server FTP dengan curl?

Gunakan curl -u user:pass -o filelokal ftp://host/path/file. curl mendukung FTP, FTPS (FTP over TLS), dan SFTP (SSH FTP) secara native. Untuk FTP anonim, hilangkan -u.

Bagaimana cara mengunduh file besar secara andal dengan curl?

Kombinasikan -C - (lanjutkan saat gagal), --retry 5 (coba ulang otomatis), --retry-delay 10, dan -L (ikuti redirect): curl -C - --retry 5 --retry-delay 10 -L -o file URL. Ini menangani gangguan jaringan secara otomatis.

Bagaimana cara menampilkan progress bar saat mengunduh dengan curl?

Gunakan curl -# -o file URL untuk progress bar sederhana. Output curl default sudah menampilkan kecepatan transfer, persentase, dan perkiraan waktu. Untuk skrip, gunakan -s untuk menyembunyikan semua output.

Bisakah saya menentukan direktori unduhan di curl?

Dengan curl 7.73+, gunakan --output-dir /path/ke/dir dikombinasikan dengan -O. Untuk versi lebih lama, tentukan path lengkap dengan -o /path/ke/dir/namafile. Tambahkan --create-dirs jika direktori belum ada.

Sebaiknya gunakan curl atau wget untuk mengunduh file?

Keduanya sangat baik. wget lebih sederhana untuk mirroring situs web rekursif dan memiliki logika retry bawaan. curl mendukung 25+ protokol (bukan hanya HTTP/FTP), lebih baik untuk panggilan API dan skripting, mendukung lebih banyak metode autentikasi, dan tersedia di hampir setiap sistem operasi.

Bagaimana cara menggunakan curl dalam skrip bash untuk mengunduh file?

Gunakan curl -fsSL -o file URL: -f gagal senyap pada error HTTP (tidak menyimpan halaman error), -s senyap, -S tampilkan error bahkan dalam mode senyap, -L ikuti redirect. Periksa kode keluar: if ! curl -fsSL -o file URL; then echo "Unduhan gagal"; exit 1; fi.