cURL veya İstemci URL'si, dosyaları almak, API'lerle arayüz oluşturmak ve hatta web kaynağı testi için geliştirilmiş bir araçtır. Ayrıca Windows, Mac ve Linux işletim sistemleri için de kullanılabilir, bu da herhangi bir cURL kullanıcısının dosya indirmesini kolaylaştırır. Client URL basit dosya indirmenin yanı sıra veri manipülasyonunu içeren daha gelişmiş görevler ve hatta komut dosyası yerleştirme için uygundur.
Bu makalede, cURL kullanarak dosyaların nasıl indirileceğini, indirme için bazı yararlı cURL komutlarını, adları, klasörleri belirtmeyi ve yönlendirmelerle, hız kısıtlamalarıyla ve çok daha fazlasıyla başa çıkmayı ele alacağız. Ayrıca Windows, Linux ve Mac sistemlerinde cURL'e özgü komutları da ele alacağız.
İndirilen belgeyi kaydederken doğru dosya adını seçmek çok önemlidir. cURL verileri kaydetmez, bunun yerine terminalde görüntüler. Bu nedenle, kullanıcı dosyayı kaydetmek için bir konum seçmezse, dosya sisteminde bulunmayacaktır.
cURL ile tüm komutlar komut satırında yapılır: Windows - cmd veya PowerShell ve Linux veya macOS - terminal kullanılarak.
Manuel dosya isimlendirmesi için kullanıcı "-o" komutunu veya alternatif olarak ayrıntılı formatı için "-output" komutunu kullanmalıdır.
Aşağıdaki örneği ele alalım:
curl -o test.html https://example.com
Bu komut example.com adresindeki sayfayı getirecek ve geçerli çalışma dizinine test.html olarak kaydedecektir.
cURL, aksi belirtilmedikçe dosyayı varsayılan olarak çalıştırılabilir dosyanın bulunduğu dizine kaydedecektir.
cURL kullanan biri, dosyanın saklanacağı dizini belirtmekle birlikte bir dosyayı nasıl kaydeder:
curl -o ~/Downloads/test.html https://example.com
Bu seçenek dosyayı kullanıcının ev dizinindeki İndirilenler alt klasörüne yerleştirecektir.
Bu yapılandırmada, bir dosya zaten mevcutsa, yeni dosya hiçbir uyarı olmadan eski dosyanın yerini alacaktır. Bunu atlamak için, dosyanın URL'de verilen adla kaydedilebilmesi için cURL -O:
curl -O https://example.com/file.txt
URL'de sağlanan file.txt ise, otomatik olarak bu adla saklanacaktır. Böyle bir dosya zaten mevcutsa, değiştirilecektir.
Veri kaybı olmadığından emin olmak için, indirmeden önce bir doğrulama istemi ayarlanabilir:
if [ -f file.txt ]; then
echo "File already exists!"
else
curl -O https://example.com/file.txt
fi
Bu betik önce dosyanın zaten mevcut olup olmadığını tarar, değilse dosyayı indirir.
Bazı dosyalar belirli konumlara kaydedilmez, bunun yerine bir yönlendirme yoluyla elde edilir. Örneğin, büyük bir dosyayı indirmeye çalışan bir cURL kullanıcısı, indirmeye başlamadan önce tarayıcının kendisini başka bir sayfaya yönlendirdiğini fark edebilir. cURL varsayılan olarak yönlendirmeleri takip etmez, ancak bu değiştirilebilir.
cURL'ün yönlendirmeleri otomatik olarak takip etmesini sağlamak için -L bayrağını ekleyin:
curl -L -o test.zip https://example.com/download
Eğer sunucu başlangıçta kullanıcıyı yeniden yönlendirirse, cURL önce yeni isteği yapacak ve ancak o zaman dosya URL'den indirilecektir.
Bu neden önemli:
cURL'ün yöntemi her yönlendirmeyi sırayla işler ve hedef bağlantıya ulaşana kadar başka bir URL'ye yönlendiren her bağlantıyı sırayla takip eder. Sunucunun sonsuz bir yönlendirme döngüsüne takılması durumunda, sunucu yakalanacaktır. cURL, yönlendirme sayısını yönetmek için kullanılabilecek bir komuta sahiptir, bu komut '--max-redirs' şeklindedir.
curl -L --max-redirs 5 -o file.zip https://example.com/download
Bu parametre cURL'e bir kısıtlama getirir, bu nedenle çok fazla yönlendirme işlenirse ve belirtilen sınırı aşarsa indirme işlemini durdurur.
Yeniden yönlendirme sınırları aşıldığında cURL'ün verdiği bir örnek aşağıdaki gibidir:
curl: (47) Maximum redirection limit reached
cURL kullanarak aynı anda birden fazla dosya indirebilirsiniz ve bazı komutlar birden fazla işletim sisteminde çalışırken, diğerleri Windows veya Linux/macOS'a özgü olacaktır.
curl -O https://example.com/file1.zip -O https://example.com/file2.zip
curl -O https://example.com/file{1,2,3}.zip
Get-Content urls.txt | ForEach-Object { curl -O $_ }
For ($i=1; $i -le 3; $i++) { curl -O "https://example.com/file$i.zip" }
Başlangıç olarak, bağlantıların listesini içeren bir urls.txt dosyası oluşturun:
https://example.com/file1.zip
https://example.com/file2.zip
https://example.com/file3.zip
Ardından komutu çalıştırın:
xargs -n 1 curl -O < urls.txt
Dosyaların numaralandırıldığı durumlarda, için kullanılması uygundur:
for i in {1..5}; do
curl -O https://example.com/file$i.zip
done
cURL kullanarak büyük bir dosya indirmeye ihtiyaç duyulduğunda ve düşük bant genişliği trafiği beklentisi olduğunda, indirme hızına saniyede (k) kilobayt, saniyede (m) megabayt veya saniyede (g) gigabayt cinsinden bir sınır koymaya yardımcı olan --limit-rate bayrağı kullanılabilir.
cURL kullanıcıları için komut yapısı her işletim sisteminde aynıdır:
curl --limit-rate 500k -O https://example.com/archive.zip
Bu durumda 500k, indirme hızının 500 KB/s'yi aşmaması gerektiğini ifade eder.
Diğer notlar:
İşte archive1.zip, archive2.zip ve archive3.zip dosyalarını 500 KB/s indirme hızında indirmek için örnek bir komut dosyası.
Windows (PowerShell):
1..3 | ForEach-Object { curl --limit-rate 500k -O https://example.com/archive$_.zip }
Linux/macOS (Bash):
for i in {1..3}; do
curl --limit-rate 500k -O https://example.com/archive$i.zip
done
Limit-rate seçeneği, ağ kesintisi olasılığını azalttığı için sürekli bir ağ bağlantısı koşullarında etkilidir. Bu, aynı anda birden fazla dosya indirilirken veya ağ üzerinde başka etkinlikler gerçekleştirilirken faydalıdır. Ek olarak, --limit-rate, indirmeler için kısıtlamaları olan bir sunucu tarafından engellenme olasılığını azaltmaya yardımcı olur. İndirme işlemi proxy üzerinden yapıldığında, parametre yükü azaltmaya ve kesilme olasılığını en aza indirmeye yardımcı olur. Bu komut ayrıca mobil internet veya sınırlı miktarda veri içeren tarifelerle çalışırken trafiği yönetmeye yardımcı olur.
cURL'de, bir indirme işleminin ilerleyişi, hızıyla birlikte, varsayılan olarak bir terminal penceresinde gösterilir. Bu bazı cURL kullanıcıları için yararlıdır, ancak betikler veya otomatik işlemler için bastırılabilir. Bu durumlarda, -s veya --silent bayrağı etkinleştirilebilir.
Dosyaları indirmek için "sessiz" modda cURL komut satırının nasıl kullanılacağına dair örnek:
curl -s -O https://example.com/file.zip
Komuttan da anlaşılacağı gibi, tüm dosyalar ekranda hiçbir bilgi gösterilmeden cURL ile indirilecektir. Sadece hataların gösterilmesi ve diğer tüm mesajların sessize alınması gerekiyorsa, -S (--show-error) kullanılabilir ve yukarıda belirtilen argümanlarla birleştirilebilir:
curl -s -S -O https://example.com/file.zip
Bazı dosyaların indirilmesi ve bazı API'lerin kullanılması yetkilendirme gerektirir. cURL, kullanıcı adı ve parola veya hatta erişim belirteçleri kullananlar gibi çok sayıda kimlik doğrulama prosedürünü destekleyen bir mimariye sahiptir.
Erişimin bir kullanıcı adı ve parola gerektirmesi durumunda, bunlar -u bayrağı ile tek bir argüman olarak gönderilebilir:
curl -u username:password -O https://example.com/protected-file.zip
Parola @, #, & gibi özel bileşenler içeriyorsa, parolayı tırnak işareti içine almanız önerilir:
curl -u username:"your@password#123" -O https://example.com/protected-file.zip
Yalnızca kullanıcı adının gönderilmesi durumunda, cURL parolayı sorar.
İhraççı sistemine kimlik doğrulaması yapmanın bir başka yöntemi de erişim belirteci kullanmaktır; bu durumda belirteç aşağıda gösterildiği gibi istek başlığına dahil edilir:
curl -H "Authorization: Bearer your_token_here" -O https://api.example.com/data.json
Bazı hizmetler belirtecin doğrudan URL'ye dahil edilmesini gerektirebilir. O zaman komut şu şekilde görünecektir:
curl -O https://api.example.com/data.json?access_token=your_token_here
Her durumda, belirteci URL'ye koymak sorunlu olabilir çünkü kullanıcının yol adı tarayıcı geçmişinde veya sunucu günlüklerinde saklanabilir.
Bu kimlik doğrulama yöntemleri, korunan bir sunucunun dosyalarından veri alınması, API'lerden veri talep edilmesi veya kurumsal bir ortamdan verilere erişilmesi gerektiğinde iyi çalışır.
Proxy'ler özellikle cURL için kullanışlıdır ve cURL çoğu protokol üzerinden veri iletimini desteklediğinden yaygın kullanımı uzaktan dosya erişimidir.
Bir proxy ayarlamak -x (veya -proxy) ile yapılır.
Komutun genel biçimi aşağıdaki gibidir:
curl -x [scheme://]proxy-server[:port] -o output.file URL
Örnek: HTTP proxy aracılığıyla bir dosya indirme:
curl -x http://proxy.testnet.com:80 -o file.zip https://example.com/archive.zip
Where:
Proxy sunucuları için bir kullanıcı adı ve parola gerektiğinde, bu şekilde kullanılabilirler:
curl -x http://proxy.example.com:80 -U user:password -o archive.zip https://example.com/archive.zip
Farklı bir yaklaşım - kimlik doğrulamasını URL üzerinden geçirmek:
curl -x http://user:password@proxy.example.com:80 -o archive.zip https://example.com/archive.zip
SOCKS5 veya SOCKS4 ile çalışmak için --proxy parametresini tür ile ayarlayın, örneğin:
curl --proxy socks5h://proxy.example.com:1080 -o archive.zip https://example.com/archive.zip
Önemli bir nüans:
Proxy, orijinal IP adresi kullanıcıların ziyaret ettiği sitelerde bulunmayacağı için anonimlik sağlayacaktır. Ayrıca, farklı bir ülkeden erişilmesi durumunda belirli bölgelerden kaynaklara konulan engeller atlanabilir. Dosyaları indirmek için bir proxy kullanarak, kurumsal ağlardaki kullanıcılar kapalı kaynaklara erişebilir ve sağlayıcıdan gelen kısıtlama veya veri önbelleğe alma sonucunda yükleme hızlarını artırabilir.
Özellikle büyük dosyalarda cURL kullanarak dosya indirme sürecini düzgün bir şekilde denetlemek için tetikte olmanız tavsiye edilir. Bu, etkileşimli bir indirme çubuğu gibi ilerleme göstergelerinin yanı sıra ayrıntılı olarak yerleşik yetenekler kullanılarak gerçekleştirilebilir.
-# veya --progress-bar bayrağı, temel indirme yüzdesi göstergesini hareketli bir çubukla değiştirir. Bu, sistem performansının daha kompakt ve grafiksel bir biçimde ölçülmesi gerektiğinde kullanışlıdır.
curl -# -o file.zip https://example.com/file.zip
Dolum göstergeli bir çubuk soldan sağa doğru hareket eder:
Bu yöntem, görüntülenen bilgi miktarında bir sınırlama ile işlemi takip etmek isteyenler için uygundur.
İndirilen verilerin hızını, süresini ve miktarını daha ayrıntılı olarak gözlemlemek için -v ve -w seçenekleri birlikte kullanılabilir.
curl -v -o file.zip https://example.com/file.zip
curl -o file.zip -w "Download speed: %{speed_download} bits per second\n" https://example.com/file.zip
Bu, tüm süreç boyunca indirme hızının izlenmesini sağlar.
Bağlantının dengesiz olduğu durumlarda, indirme hızı yakından değerlendirilebilir. Engelleme varsa, işlemin hızında ani bir düşüş veya tamamen bir düşüş olacaktır. Bağlantı sabit olduğunda, hız ve ağın genel performansı izlenebilir.
cURL komutu, bağlantı kesilmeleri, onaylamalar ve hatta HTTP yanıt kodları parametreleri gibi hataları teşhis etmede çok önemli olabilecek sorunları tanımlamaya yardımcı olabilecek çok sayıda bilginin alınmasına izin verir. Bu amaçla, genişletilmiş çıktı modunu açan -v bayrağı kullanılacaktır.
Örnek:
curl -v -o file.zip https://example.com/archive.zip
Komutun yürütülmesi sırasında çıktı aşağıdaki gibi görünecektir.
Aşağıdaki temel verileri fark edeceksiniz:
Sunucu isteklerinin ve yanıtlarının ayrıntıları -v bayrağı eklenerek cURL ile görüntülenebilir. Bu, istemcinin sunucu ile nasıl iletişim kurduğuna dair bilgi sağlar. Örneğin, bir yönlendirme durumunda, sunucu konumu yeni bir URL'ye değiştirirse, "-v" "status 301 Moved Permanently" veya "302 Found" komutlarının kullanımını gösterecektir.
Bu, kısıtlı erişime ve dosya yokluğuna atıfta bulunan "403 Yasak" veya "404 Bulunamadı" gibi hataları kontrol etmek için de kullanılabilir. Ayrıca, indirme işleminden önce farklı dosya parametrelerini analiz etmek için yanıt başlıkları da kontrol edilebilir.
cURL ve Wget, komut satırı arayüzlerinde dosya indirme için en önde gelen iki araçtır ve cURL ve Wget bu amaçla yaygın olarak kullanılmaktadır, ancak işlevsellikleri farklıdır.
Ayrıca, aralarındaki temel ayrımlara da bir göz atalım.
Fonksiyon | cURL | Wget |
---|---|---|
Paralel indirme desteği | Ek komutlar gerektirir | Yerleşik |
İndirmelerin otomatik olarak devam ettirilmesi | -C - bayrağı gerektirir | Yerleşik |
API'ler ile çalışır (POST, PUT istekleri ve başlıkları gönderme) | Varsayılan olarak | Sınırlı |
Yönlendirmeleri atlama | -L bayrağı ile | Yerleşik |
Proxy desteği | Varsayılan olarak | Varsayılan olarak |
Yerleşik ilerleme çubuğu | İhtiyaçlar -# bayrak | Yok |
Arka plan çalışması | Desteklenmiyor | -b bayrağına ihtiyaç var |
Komut dosyalarına entegrasyon | Evet (yanıt kodu döndürür) | Sınırlı |
Wget ve cURL'ün komut sözdiziminde de farklılıklar vardır:
Wget öncelikle dosya indirmek için oluşturulmuş gibi görünürken, cURL HTTP istekleri ve API'lerle etkileşim için yapılmıştır.
Desteklenen protokoller açısından Wget, cURL ile karşılaştırıldığında birçok açıdan dezavantajlıdır.
Gerçekten de cURL, çok sayıda protokolü, dosya adlandırma kurallarını, proxy kullanımını ve yarıda kesilen indirmeleri devam ettirme yeteneğini desteklemesi açısından takdire şayandır.
cURL sadece basit indirmelerin API'lerle entegre olması veya büyük veri getirme işlemlerinin gerçekleştirilmesi için uygun değildir. Bununla birlikte, yönlendirme, hız sınırları belirleme, kimlik doğrulama ve sunucu etkileşimini izleme, sunucu bağlantısı tanılama ve web kaynağı testine izin verme yeteneği, onu çok amaçlı harika bir araç haline getirir. Ve sunulan esnek parametre özelleştirmeleri ile cURL her türlü göreve uyacak şekilde uyarlanabilir.
Yorumlar: 0