curl ile Dosya İndirme
curl, HTTP, HTTPS, FTP ve düzinelerce başka protokol üzerinden dosya indirmek için en çok yönlü komut satırı araçlarından biridir. Tek bir API yanıtını dosyaya kaydetmeniz veya bir shell betiğinde toplu indirmeleri otomatikleştirmeniz gereksin — curl bunun için bir bayrağa sahiptir. Bu rehber, indirme ile ilgili tüm seçenekleri kapsar — -o ve -O ile temel dosya kaydetmeden, -C - ile yarıda kalan transferleri sürdürmeye, --limit-rate ile bant genişliğini kısıtlamaya ve ilerleme çubuğu göstermeye kadar. Her bayrak için net bir açıklama, yaygın kullanım kalıpları ve kopyalamaya hazır bir örnek bulunmaktadır.
İndirme Bayrakları Hızlı Referans
Çıktıyı stdout yerine belirtilen dosyaya yaz
Çıktıyı uzak dosya ile aynı adda bir dosyaya yaz
HTTP 3xx yönlendirmelerini otomatik takip et
Önceki dosya transferini devam ettir/sürdür
Transfer hızını belirtilen değerle sınırla
Belirtilen boyuttan büyük dosyaları indirmeyi reddet
Dosyayı adlandırmak için Content-Disposition başlığını kullan
Transfer ilerlemesini basit bir ilerleme çubuğu olarak göster
Sunucu kimlik doğrulaması için kullanıcıadı:parola sağla
Geçici hatalarda transferi yeniden dene (tekrar sayısı)
Yeniden denemeler arasında bu kadar saniye bekle
Yerel dosyayı bir URL'ye yükle (varsayılan olarak PUT)
Çıktıyı kaydederken gerektiğinde yerel dizinler oluştur
İlerleme göstergesi ve hata mesajlarını bastır
Çıktı dosya(lar)ını belirtilen dizine kaydet (curl 7.73+)
curl -o: Belirli Bir Dosya Adıyla Kaydet
- Ne yapar
-o(veya--output) bayrağı, curl'a yanıt gövdesini belirttiğiniz bir dosyaya kaydetmesini söyler. Bu bayrak olmadan curl yanıtı stdout'a (terminalinize) yazdırır. Herhangi bir dosya adı ve yol kullanabilirsiniz — curl dosyayı oluşturur veya mevcut olanın üzerine yazar.- Yaygın kullanım
- Tam dosya adını kontrol etmeniz veya belirli bir dizine kaydetmeniz gerektiğinde
-okullanın. HTTP, HTTPS, FTP, SFTP ve daha fazlası dahil her protokolle çalışır. Yönlendirmeleri işlemek için-Lile, betiklerde sessiz çalışma için-sile birleştirin.
$ curl -o report.pdf https://example.com/files/report.pdfcurl -O: Uzak Dosya Adıyla Kaydet
- Ne yapar
-O(veya--remote-name) bayrağı, indirilen dosyayı URL'den çıkarılan dosya adıyla kaydeder. Örneğin URL/data.csvile bitiyorsa, curl mevcut dizindedata.csvadlı bir dosya oluşturur.- Yaygın kullanım
- Uzak dosya adı anlamlı olduğunda ve yeniden adlandırmanıza gerek olmadığında
-Okullanın. Tek komutla birden fazla dosya indirmek için birden fazla-Obayrağı geçirebilirsiniz. Not: URL bir dosya adı içermiyorsa (örneğin/ile bitiyorsa), curl başarısız olur — bunun yerine-okullanın.
$ curl -O https://example.com/files/data.csvcurl -L: Yönlendirmeleri Takip Et
- Ne yapar
-L(veya--location) bayrağı, curl'un HTTP yönlendirmelerini otomatik takip etmesini sağlar — 301 (Kalıcı Taşınma), 302 (Bulundu), 307 ve 308.-Lolmadan curl, gerçek içerik yerine yönlendirme yanıtının kendisini döndürür.- Yaygın kullanım
- Çoğu indirme URL'si en az bir kez yönlendirir (örneğin HTTP'den HTTPS'ye veya kısa URL'den gerçek dosyaya). Dosya indirirken her zaman
-Lile-oveya-Obirleştirin. Varsayılan olarak curl 50 yönlendirmeye kadar takip eder; bunu--max-redirsile değiştirin.
$ curl -L -o latest.tar.gz https://github.com/user/repo/releases/latest/download/app.tar.gzcurl -C -: Yarıda Kalan İndirmeleri Sürdür
- Ne yapar
-C -(veya--continue-at -) bayrağı, curl'a mevcut kısmi dosyanın boyutunu otomatik algılamasını ve indirmeyi kaldığı yerden sürdürmesini söyler. Bunun çalışması için sunucunun HTTPRangebaşlığını desteklemesi gerekir.- Yaygın kullanım
- Büyük bir indirme ağ sorunu veya zaman aşımı nedeniyle kesintiye uğradıysa, aynı komutu
-C -ekleyerek yeniden çalıştırın. curl birRange: bytes=OFFSET-başlığı gönderir ve yalnızca kalan verileri indirir. Bu, güvenilir olmayan bağlantılar üzerindeki büyük dosyalar için vazgeçilmezdir.
$ curl -C - -o largefile.zip https://cdn.example.com/largefile.zipcurl --limit-rate: İndirme Hızını Kısıtla
- Ne yapar
--limit-ratebayrağı, indirme (ve yükleme) hızını belirtilen değerle sınırlar. Son ekler kabul eder: kilobayt/s içinkveyaK, megabayt/s içinmveyaM, gigabayt/s içingveyaG.- Yaygın kullanım
- Büyük dosyalar indirirken, özellikle paylaşımlı bağlantılarda bant genişliğinizi doldurmamak için
--limit-ratekullanın. Uygulamanızın yavaş yanıtları nasıl işlediğini test etmek için de faydalıdır.
$ curl --limit-rate 1M -o bigfile.iso https://mirror.example.com/bigfile.isocurl --max-filesize: Dosya Çok Büyükse İptal Et
- Ne yapar
--max-filesizebayrağı, beklenen dosya boyutu (Content-Lengthbaşlığından) belirtilen sınırı aşarsa curl'a transferi iptal etmesini söyler. Boyutk,M,Ggibi son ekler kullanabilir.- Yaygın kullanım
- Betiklerde beklenmedik büyüklükteki indirmelerin disk alanını tüketmesini önlemek için kullanın. Tüm sunucular
Content-Lengthgöndermez — bu durumda curl bu sınırı uygulayamaz ve indirme normal devam eder.
$ curl --max-filesize 100M -o update.bin https://example.com/update.bincurl -J: Sunucunun Önerdiği Dosya Adını Kullan
- Ne yapar
-J(veya--remote-header-name) bayrağı, curl'a URL'den türetmek yerine sunucununContent-Dispositionbaşlığında belirtilen dosya adını kullanmasını söyler. Bu, anlamlı adlarla dosya döndüren indirme API'lerinde yaygındır.- Yaygın kullanım
- Her zaman
-Jile-Obirleştirin. URL bir API uç noktası olduğunda (/export?format=csvgibi) ancak sunucu başlıklarda uygun bir dosya adı döndürdüğünde faydalıdır. Güvenlik notu: dosya adını sunucu kontrol eder, bu nedenle yalnızca güvenilir sunucularla kullanın.
$ curl -L -O -J https://example.com/api/export?format=csvcurl -#: İlerleme Çubuğu Göster
- Ne yapar
-#(veya--progress-bar) bayrağı, varsayılan ayrıntılı ilerleme göstergesini basit bir###ilerleme çubuğuyla değiştirir. Etkileşimli kullanım için okunması daha kolaydır.- Yaygın kullanım
- Etkileşimli indirme yaparken ve temiz bir ilerleme göstergesi istediğinizde
-#kullanın. Betikler için-s(sessiz) veya varsayılan ilerleme göstergesini tercih edin. Varsayılan curl çıktısı zaten hız, yüzde, kalan süre ve toplam boyutu gösterir.
$ curl -# -o archive.tar.gz https://example.com/archive.tar.gzEk İndirme Seçenekleri
Sunucu kimlik doğrulaması için kullanıcıadı:parola sağla
Geçici hatalarda transferi yeniden dene (tekrar sayısı)
Yeniden denemeler arasında bu kadar saniye bekle
Yerel dosyayı bir URL'ye yükle (varsayılan olarak PUT)
Çıktıyı kaydederken gerektiğinde yerel dizinler oluştur
İlerleme göstergesi ve hata mesajlarını bastır
Çıktı dosya(lar)ını belirtilen dizine kaydet (curl 7.73+)
Gerçek Dünya İndirme Senaryoları
Bu örnekler, günlük geliştirme ve betik yazımında karşılaşacağınız yaygın indirme görevlerini ele almak için birden fazla bayrağı birleştirir.
Birden Fazla Dosyayı Aynı Anda İndir
Tek komutla birden fazla dosya indirmek için birden fazla -O bayrağı kullanın. curl bunları sırayla işler. Paralel indirmeler için xargs veya GNU parallel kullanın.
$ curl -O https://example.com/file1.txt -O https://example.com/file2.txt -O https://example.com/file3.txtFTP Sunucusundan İndirme
curl, FTP, FTPS ve SFTP'yi yerel olarak destekler. Kimlik doğrulamalı erişim için -u user:password ekleyin. Uzak dosya adını korumak için -O kullanın.
$ curl -u user:pass -o backup.sql ftp://ftp.example.com/db/backup.sqlKimlik Doğrulamalı İndirme
Basic Auth için -u user:pass veya Bearer token ya da API anahtarı göndermek için -H kullanın. Tam bir indirme için -L ve -o ile birleştirin.
$ curl -H "Authorization: Bearer eyJhbGciOi..." -L -o data.json https://api.example.com/exportSürdürme ve Yeniden Deneme ile Güvenilir İndirme
Ağ kesintilerine dayanıklı güçlü indirmeler için -C - (sürdürme), --retry (hatada otomatik yeniden deneme) ve -L (yönlendirmeleri takip) birleştirin.
$ curl -C - --retry 5 --retry-delay 10 -L -o largefile.zip https://cdn.example.com/largefile.zipcurl ile İndirme Hakkında Sık Sorulan Sorular
curl -o ve curl -O arasındaki fark nedir?
-o filename indirmeyi belirttiğiniz tam dosya adına kaydeder. -O dosya adını URL'den çıkarır ve onu kullanır. Özel bir ad veya yol istediğinizde -o kullanın; uzak dosya adı uygunsa -O kullanın.
curl neden gerçek dosya yerine boş veya HTML dosyası indiriyor?
URL muhtemelen bir HTTP yönlendirmesi (301 veya 302) döndürüyor. Varsayılan olarak curl, son içerik yerine yönlendirme yanıtının kendisini kaydeder. Yönlendirmeleri otomatik takip etmek için -L ekleyin: curl -L -o dosya URL.
curl ile kısmen indirilmiş bir dosyayı nasıl sürdürebilirim?
curl -C - -o filename URL kullanın. -C - bayrağı mevcut dosya boyutunu algılar ve yalnızca kalan baytları istemek için bir Range başlığı gönderir. Bunun çalışması için sunucunun range isteklerini desteklemesi gerekir.
curl'da indirme hızını nasıl sınırlarım?
--limit-rate ile bir değer ve son ek kullanın: curl --limit-rate 500k -o dosya URL hızı 500 KB/s ile sınırlar. Son ekler: k (KB/s), M (MB/s), G (GB/s).
curl aynı anda birden fazla dosya indirebilir mi?
Evet. Birden fazla -O bayrağı kullanın: curl -O URL1 -O URL2 -O URL3. curl bunları sırayla indirir. Paralel indirmeler için URL listesini xargs -P 4 -I {} curl -O {} ile yönlendirin.
Kimlik doğrulaması gerektiren bir dosyayı nasıl indiririm?
HTTP Basic Auth için: curl -u user:pass -o dosya URL. Bearer token'lar için: curl -H "Authorization: Bearer TOKEN" -o dosya URL. Başlıklardaki API anahtarları için: curl -H "X-API-Key: KEY" -o dosya URL.
curl ile FTP sunucusundan dosya nasıl indirilir?
curl -u user:pass -o yereldosya ftp://host/yol/dosya kullanın. curl, FTP, FTPS (TLS üzerinden FTP) ve SFTP (SSH FTP) protokollerini yerel olarak destekler. Anonim FTP için -u parametresini atlayın.
Büyük dosyaları curl ile güvenilir şekilde nasıl indiririm?
-C - (hatada sürdürme), --retry 5 (otomatik yeniden deneme), --retry-delay 10 ve -L (yönlendirmeleri takip) birleştirin: curl -C - --retry 5 --retry-delay 10 -L -o dosya URL. Bu, ağ kesintilerini otomatik olarak yönetir.
curl ile indirirken ilerleme çubuğunu nasıl gösteririm?
Basit bir ilerleme çubuğu için curl -# -o dosya URL kullanın. Varsayılan curl çıktısı zaten transfer hızı, yüzde ve tahmini süreyi gösterir. Betikler için tüm çıktıyı bastırmak üzere -s kullanın.
curl'da indirme dizini belirleyebilir miyim?
curl 7.73+ ile --output-dir /yol/dizin ve -O birleştirin. Eski sürümler için -o /path/to/dir/filename ile tam yolu belirtin. Dizin henüz yoksa --create-dirs ekleyin.
Dosya indirmek için curl mu yoksa wget mi kullanmalıyım?
İkisi de mükemmeldir. wget özyinelemeli web sitesi yansılama için daha basittir ve yerleşik yeniden deneme mantığına sahiptir. curl 25'ten fazla protokolü destekler (sadece HTTP/FTP değil), API çağrıları ve betik yazımı için daha iyidir, daha fazla kimlik doğrulama yöntemi destekler ve neredeyse her işletim sisteminde mevcuttur.
Dosya indirmek için bash betiğinde curl'u nasıl kullanırım?
curl -fsSL -o dosya URL kullanın: -f HTTP hatalarında sessizce başarısız olur (hata sayfası kaydedilmez), -s sessiz, -S sessiz modda bile hataları gösterir, -L yönlendirmeleri takip eder. Çıkış kodunu kontrol edin: if ! curl -fsSL -o file URL; then echo "Download failed"; exit 1; fi.