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
Tulis output ke file bernama tertentu alih-alih stdout
Tulis output ke file dengan nama seperti file remote
Ikuti redirect HTTP 3xx secara otomatis
Lanjutkan transfer file sebelumnya
Batasi kecepatan transfer ke nilai yang ditentukan
Tolak mengunduh file yang lebih besar dari ukuran yang ditentukan
Gunakan header Content-Disposition untuk memberi nama file
Tampilkan progress transfer sebagai progress bar sederhana
Berikan username:password untuk autentikasi server
Coba ulang transfer pada error sementara (jumlah percobaan)
Tunggu sekian detik antara percobaan ulang
Unggah file lokal ke URL (PUT secara default)
Buat direktori lokal sesuai kebutuhan saat menyimpan output
Sembunyikan meter progress dan pesan error
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
-osaat 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-Luntuk menangani redirect dan-suntuk operasi senyap dalam skrip.
$ curl -o report.pdf https://example.com/files/report.pdfcurl -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 bernamadata.csvdi direktori saat ini. - Penggunaan umum
- Gunakan
-Osaat nama file remote sudah sesuai dan Anda tidak perlu mengubah namanya. Anda dapat memberikan beberapa flag-Ountuk mengunduh beberapa file dalam satu perintah. Catatan: jika URL tidak berisi nama file (misalnya berakhiran/), curl akan gagal — gunakan-osebagai gantinya.
$ curl -O https://example.com/files/data.csvcurl -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
-Ldengan-oatau-Osaat 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.gzcurl -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 HTTPRangeagar 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 headerRange: 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.zipcurl --limit-rate: Batasi Kecepatan Unduhan
- Fungsinya
- Flag
--limit-ratemembatasi kecepatan unduh (dan unggah) ke nilai yang ditentukan. Flag ini menerima sufiks:katauKuntuk kilobyte/s,matauMuntuk megabyte/s,gatauGuntuk gigabyte/s. - Penggunaan umum
- Gunakan
--limit-rateuntuk 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.isocurl --max-filesize: Batalkan jika File Terlalu Besar
- Fungsinya
- Flag
--max-filesizememerintahkan curl untuk membatalkan transfer jika ukuran file yang diharapkan (dari headerContent-Length) melebihi batas yang ditentukan. Ukuran dapat menggunakan sufiks sepertik,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.bincurl -J: Gunakan Nama File yang Disarankan Server
- Fungsinya
- Flag
-J(atau--remote-header-name) memerintahkan curl untuk menggunakan nama file yang ditentukan dalam headerContent-Dispositionserver alih-alih mengambilnya dari URL. Ini umum untuk API unduhan yang mengembalikan file dengan nama yang bermakna. - Penggunaan umum
- Selalu kombinasikan
-Jdengan-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=csvcurl -#: 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.gzOpsi Unduhan Tambahan
Berikan username:password untuk autentikasi server
Coba ulang transfer pada error sementara (jumlah percobaan)
Tunggu sekian detik antara percobaan ulang
Unggah file lokal ke URL (PUT secara default)
Buat direktori lokal sesuai kebutuhan saat menyimpan output
Sembunyikan meter progress dan pesan error
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.txtUnduh 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.sqlUnduh 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/exportUnduhan 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.zipPertanyaan 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.