Cara Memuat Turun Fail dengan curl
curl adalah salah satu alat baris perintah yang paling serba boleh untuk memuat turun fail melalui HTTP, HTTPS, FTP, dan berpuluh-puluh protokol lain. Sama ada anda perlu menyimpan respons API tunggal ke fail atau mengautomasi muat turun kelompok dalam skrip shell, curl mempunyai bendera untuk itu. Panduan ini merangkumi setiap pilihan berkaitan muat turun — dari penyimpanan fail asas dengan -o dan -O hingga meneruskan pemindahan yang terganggu dengan -C -, mengehadkan lebar jalur dengan --limit-rate, dan memaparkan bar kemajuan. Setiap bendera termasuk penjelasan yang jelas, corak penggunaan biasa, dan contoh sedia untuk disalin.
Rujukan Pantas Bendera Muat Turun
Tulis output ke fail yang dinamakan dan bukannya stdout
Tulis output ke fail yang dinamakan seperti fail jauh
Ikuti pengalihan HTTP 3xx secara automatik
Teruskan/sambung semula pemindahan fail sebelumnya
Hadkan kelajuan pemindahan kepada kadar yang diberikan
Tolak untuk memuat turun fail yang lebih besar daripada saiz yang ditentukan
Gunakan pengepala Content-Disposition untuk menamakan fail
Paparkan kemajuan pemindahan sebagai bar kemajuan mudah
Sediakan nama pengguna:kata laluan untuk pengesahan pelayan
Cuba semula pemindahan pada ralat sementara (bilangan kali)
Tunggu saat ini antara cubaan semula
Muat naik fail tempatan ke URL (PUT secara lalai)
Cipta direktori tempatan mengikut keperluan apabila menyimpan output
Sekat meter kemajuan dan mesej ralat
Simpan fail output dalam direktori yang ditentukan (curl 7.73+)
curl -o: Simpan ke Nama Fail Tertentu
- Apa yang dilakukannya
- Bendera
-o(atau--output) memberitahu curl untuk menyimpan badan respons ke fail yang anda tentukan. Tanpanya, curl mencetak respons ke stdout (terminal anda). Anda boleh menggunakan sebarang nama fail dan laluan — curl akan mencipta fail atau menimpa fail yang sedia ada. - Penggunaan biasa
- Gunakan
-oapabila anda perlu mengawal nama fail yang tepat atau menyimpan ke direktori tertentu. Ia berfungsi dengan sebarang protokol — HTTP, HTTPS, FTP, SFTP, dan banyak lagi. Gabungkan dengan-Luntuk mengendalikan pengalihan dan-suntuk operasi senyap dalam skrip.
$ curl -o report.pdf https://example.com/files/report.pdfcurl -O: Simpan dengan Nama Fail Jauh
- Apa yang dilakukannya
- Bendera
-O(atau--remote-name) menyimpan fail yang dimuat turun menggunakan nama fail yang diekstrak dari URL. Contohnya, jika URL berakhir dengan/data.csv, curl mencipta fail bernamadata.csvdalam direktori semasa. - Penggunaan biasa
- Gunakan
-Oapabila nama fail jauh bermakna dan anda tidak perlu menamakan semula. Anda boleh menghantar beberapa bendera-Ountuk memuat turun beberapa fail dalam satu arahan. Nota: jika URL tidak mengandungi nama fail (cth., berakhir dengan/), curl akan gagal — gunakan-osebagai ganti.
$ curl -O https://example.com/files/data.csvcurl -L: Ikuti Pengalihan
- Apa yang dilakukannya
- Bendera
-L(atau--location) membuat curl mengikuti pengalihan HTTP secara automatik — 301 (Dipindahkan Secara Kekal), 302 (Dijumpai), 307, dan 308. Tanpa-L, curl mengembalikan respons pengalihan itu sendiri dan bukannya kandungan sebenar. - Penggunaan biasa
- Kebanyakan URL muat turun mengalihkan sekurang-kurangnya sekali (cth., dari HTTP ke HTTPS, atau dari URL pendek ke fail sebenar). Sentiasa gabungkan
-Ldengan-oatau-Oapabila memuat turun fail. Secara lalai curl mengikuti sehingga 50 pengalihan; ubah ini dengan--max-redirs.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gzcurl -C -: Sambung Semula Muat Turun yang Terganggu
- Apa yang dilakukannya
- Bendera
-C -(atau--continue-at -) memberitahu curl untuk mengesan saiz fail separa yang sedia ada secara automatik dan meneruskan muat turun dari tempat ia berhenti. Pelayan mesti menyokong pengepala HTTPRangeuntuk ini berfungsi. - Penggunaan biasa
- Jika muat turun besar terganggu oleh masalah rangkaian atau tamat masa, jalankan semula arahan yang sama dengan
-C -ditambah. curl akan menghantar pengepalaRange: bytes=OFFSET-dan hanya memuat turun data yang tinggal. Ini penting untuk fail besar melalui sambungan yang tidak stabil.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zipcurl --limit-rate: Hadkan Kelajuan Muat Turun
- Apa yang dilakukannya
- Bendera
--limit-ratemengehadkan kelajuan muat turun (dan muat naik) kepada kadar yang ditentukan. Ia menerima akhiran:katauKuntuk kilobait/s,matauMuntuk megabait/s,gatauGuntuk gigabait/s. - Penggunaan biasa
- Gunakan
--limit-rateuntuk mengelak tepu lebar jalur anda apabila memuat turun fail besar, terutamanya pada sambungan yang dikongsi. Ia juga berguna untuk menguji bagaimana aplikasi anda mengendalikan respons perlahan.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.isocurl --max-filesize: Batalkan jika Fail Terlalu Besar
- Apa yang dilakukannya
- Bendera
--max-filesizememberitahu curl untuk membatalkan pemindahan jika saiz fail yang dijangka (dari pengepalaContent-Length) melebihi had yang ditentukan. Saiz boleh menggunakan akhiran sepertik,M,G. - Penggunaan biasa
- Gunakan dalam skrip untuk mengelak muat turun yang tidak dijangka besar daripada menghabiskan ruang cakera. Perhatikan bahawa tidak semua pelayan menghantar
Content-Length— dalam kes itu, curl tidak boleh menguatkuasakan had ini dan muat turun diteruskan seperti biasa.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bincurl -J: Gunakan Nama Fail yang Dicadangkan Pelayan
- Apa yang dilakukannya
- Bendera
-J(atau--remote-header-name) memberitahu curl untuk menggunakan nama fail yang ditentukan dalam pengepalaContent-Dispositionpelayan dan bukannya mengekstraknya dari URL. Ini biasa untuk API muat turun yang mengembalikan fail dengan nama yang bermakna. - Penggunaan biasa
- Sentiasa gabungkan
-Jdengan-O. Ini berguna apabila URL adalah titik akhir API (seperti/export?format=csv) tetapi pelayan mengembalikan nama fail yang betul dalam pengepala. Nota keselamatan: pelayan mengawal nama fail, jadi gunakan hanya dengan pelayan yang dipercayai.
$ curl -L -O -J https://example.com/api/export?format=csvcurl -#: Papar Bar Kemajuan
- Apa yang dilakukannya
- Bendera
-#(atau--progress-bar) menggantikan meter kemajuan terperinci lalai dengan bar kemajuan###yang mudah. Ini lebih mudah dibaca untuk penggunaan interaktif. - Penggunaan biasa
- Gunakan
-#apabila memuat turun secara interaktif dan anda mahukan penunjuk kemajuan yang bersih. Untuk skrip, utamakan-s(senyap) atau meter kemajuan lalai. Output curl lalai sudah menunjukkan kelajuan, peratusan, masa yang tinggal, dan jumlah saiz.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gzPilihan Muat Turun Tambahan
Sediakan nama pengguna:kata laluan untuk pengesahan pelayan
Cuba semula pemindahan pada ralat sementara (bilangan kali)
Tunggu saat ini antara cubaan semula
Muat naik fail tempatan ke URL (PUT secara lalai)
Cipta direktori tempatan mengikut keperluan apabila menyimpan output
Sekat meter kemajuan dan mesej ralat
Simpan fail output dalam direktori yang ditentukan (curl 7.73+)
Senario Muat Turun Dunia Sebenar
Contoh-contoh ini menggabungkan beberapa bendera untuk mengendalikan tugas muat turun biasa yang akan anda temui dalam pembangunan dan penskripan harian.
Muat Turun Beberapa Fail Sekaligus
Gunakan beberapa bendera -O untuk memuat turun beberapa fail dalam satu arahan. curl memprosesnya secara berurutan. Untuk muat turun selari, gunakan xargs atau GNU parallel.
$ curl -O https://example.com/file1.txt -O https://example.com/file2.txt -O https://example.com/file3.txtMuat Turun dari Pelayan FTP
curl menyokong FTP, FTPS, dan SFTP secara asli. Tambah -u user:password untuk akses yang disahkan. Gunakan -O untuk mengekalkan nama fail jauh.
$ curl -u user:pass -o backup.sql ftp://ftp.example.com/db/backup.sqlMuat Turun dengan Pengesahan
Gunakan -u user:pass untuk Basic Auth, atau -H untuk menghantar token Bearer atau kunci API. Gabungkan dengan -L dan -o untuk muat turun yang lengkap.
$ curl -H "Authorization: Bearer eyJhbGciOi..." -L -o data.json https://api.example.com/exportMuat Turun Boleh Dipercayai dengan Sambung Semula dan Cuba Semula
Gabungkan -C - (sambung semula), --retry (cuba semula automatik pada kegagalan), dan -L (ikuti pengalihan) untuk muat turun yang tahan terhadap gangguan rangkaian.
$ curl -C - --retry 5 --retry-delay 10 -L -o largefile.zip https://cdn.example.com/largefile.zipSoalan Lazim tentang Muat Turun dengan curl
Apakah perbezaan antara curl -o dan curl -O?
-o filename menyimpan muat turun ke nama fail yang tepat yang anda tentukan. -O mengekstrak nama fail dari URL dan menggunakannya. Gunakan -o apabila anda mahukan nama atau laluan tersuai; gunakan -O apabila nama fail jauh sudah memadai.
Mengapa curl memuat turun fail kosong atau HTML dan bukannya fail sebenar?
URL mungkin mengembalikan pengalihan HTTP (301 atau 302). Secara lalai, curl menyimpan respons pengalihan itu sendiri — bukan kandungan akhir. Tambah -L untuk mengikuti pengalihan secara automatik: curl -L -o file URL.
Bagaimana saya meneruskan fail yang dimuat turun separuh dengan curl?
Gunakan curl -C - -o filename URL. Bendera -C - mengesan saiz fail sedia ada dan menghantar pengepala Range untuk meminta hanya bait yang tinggal. Pelayan mesti menyokong permintaan julat untuk ini berfungsi.
Bagaimana saya mengehadkan kelajuan muat turun dalam curl?
Gunakan --limit-rate dengan nilai dan akhiran: curl --limit-rate 500k -o file URL mengehadkan kelajuan pada 500 KB/s. Akhiran: k (KB/s), M (MB/s), G (GB/s).
Bolehkah curl memuat turun beberapa fail sekaligus?
Ya. Gunakan beberapa bendera -O: curl -O URL1 -O URL2 -O URL3. curl memuat turunnya secara berurutan. Untuk muat turun selari, salurkan senarai URL ke xargs -P 4 -I {} curl -O {}.
Bagaimana saya memuat turun fail yang memerlukan pengesahan?
Untuk HTTP Basic Auth: curl -u user:pass -o file URL. Untuk token Bearer: curl -H "Authorization: Bearer TOKEN" -o file URL. Untuk kunci API dalam pengepala: curl -H "X-API-Key: KEY" -o file URL.
Bagaimana saya memuat turun fail dari pelayan FTP dengan curl?
Gunakan curl -u user:pass -o localfile ftp://host/path/file. curl menyokong FTP, FTPS (FTP melalui TLS), dan SFTP (SSH FTP) secara asli. Untuk FTP tanpa nama, tinggalkan -u.
Bagaimana saya memuat turun fail besar dengan pasti menggunakan curl?
Gabungkan -C - (sambung semula pada kegagalan), --retry 5 (cuba semula auto), --retry-delay 10, dan -L (ikuti pengalihan): curl -C - --retry 5 --retry-delay 10 -L -o file URL. Ini mengendalikan masalah rangkaian secara automatik.
Bagaimana saya memaparkan bar kemajuan semasa memuat turun dengan curl?
Gunakan curl -# -o file URL untuk bar kemajuan mudah. Output curl lalai sudah menunjukkan kelajuan pemindahan, peratusan, dan anggaran masa. Untuk skrip, gunakan -s untuk menyekat semua output.
Bolehkah saya menentukan direktori muat turun dalam curl?
Dengan curl 7.73+, gunakan --output-dir /path/to/dir digabungkan dengan -O. Untuk versi lama, tentukan laluan penuh dengan -o /path/to/dir/filename. Tambah --create-dirs jika direktori belum wujud.
Patutkah saya menggunakan curl atau wget untuk memuat turun fail?
Kedua-duanya sangat baik. wget lebih mudah untuk pencerminan laman web rekursif dan mempunyai logik cuba semula terbina dalam. curl menyokong 25+ protokol (bukan hanya HTTP/FTP), lebih baik untuk panggilan API dan penskripan, menyokong lebih banyak kaedah pengesahan, dan tersedia pada hampir setiap sistem pengendalian.
Bagaimana saya menggunakan curl dalam skrip bash untuk memuat turun fail?
Gunakan curl -fsSL -o file URL: -f gagal senyap pada ralat HTTP (tiada halaman ralat disimpan), -s senyap, -S tunjuk ralat walaupun dalam mod senyap, -L ikuti pengalihan. Semak kod keluar: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.