cURL Kullanarak Dosyaların Nasıl İndirileceğine İlişkin Eksiksiz Kılavuz

Yorumlar: 0

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.

Client URL.jpg

Dosya Adlarını Yönetme

İ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.

Yönlendirmeleri İşleme

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:

  • Araya giren sayfalardan geçme ihtiyacını ortadan kaldırmak. Bazı sayfalar sınırlı indirme, kimlik doğrulama veya reklam gibi nedenlerle yönlendirmeler uygular.
  • Kısaltılmış URL'ler kullanmak. Örneğin, Bit.ly veya TinyURL ve diğerleri, kullanıcıyı gerçek URL'ye yönlendirir, -L olmadan cURL gerçek dosya yerine yönlendirme içeren bir HTML sayfası getirir.
  • HTTPS yönlendirme desteği. Bazı siteler ilk olarak tüm http:// isteklerini https:// adresine yönlendirecektir. Eğer -L kullanılmazsa, dosya indirme işlemi çalışmayacaktır.

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

Birden Fazla Dosya İndirme

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.

Tüm işletim sistemlerinde ortak olan yollar

  • Bir sunucu birden fazla dosya içeriyorsa, tek yapmanız gereken gerektiği kadar -O komutu eklemek olacaktır:
    
    curl -O https://example.com/file1.zip -O https://example.com/file2.zip
    
    
  • Dosyalar file1.zip, file2.zip, file3.zip gibi sırayla numaralandırılmışsa, dosya adını parantez içine alabilirsiniz:
    
    curl -O https://example.com/file{1,2,3}.zip
    
    

Windows için

  • Windows cURL için, bir kullanıcı urls.txt gibi URL'leri içeren bir metin belgesine sahipse, komut satırını kullanarak dosyayı indirebilir:
    
    Get-Content urls.txt | ForEach-Object { curl -O $_ }
    
    
  • Dosyalar numaralandırılmışsa, bir döngü kullanabilirsiniz:
    
    For ($i=1; $i -le 3; $i++) { curl -O "https://example.com/file$i.zip" }
    
    

Linux ve MacOS için

  • Bir listeden indirme.

    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
    
    
  • Bir döngü içinde indirme (Bash).

    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
    
    

Oran Sınırlama

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:

  • --limit-rate 2m - 2 MB/s sınırı;
  • --limit-rate 100k - 100 KB/s sınırı.

İş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.

Sessiz İndirmeler

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

Kimlik Doğrulama

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 ile İndirme

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:

  • -x http://proxy.testnet.com:80 - gerekli HTTP proxy'sini ve kullanacağı portu belirtir;
  • -o archive.zip - altında saklanacak dosya adını belirtir;
  • https://example.com/archive.zip - indirilmekte olan dosyanın konumu.

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:

  • socks5h:// - DNS sorgularının proxy üzerinden daha yüksek anonimlikle geçirilmesini sağlar;
  • socks5:// - DNS sorgularını doğrudan iletir (daha az güvenli).

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.

İlerlemenin İzlenmesi

Ö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:

1.jpg

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.

  • -v ile örnek (Çıktıda bazı ek ayrıntılar):
    
    curl -v -o file.zip https://example.com/file.zip
    
    
  • İndirme işlemi tamamlandıktan sonra ana göstergeleri görüntülemek için -w ile belirli bir form ayarlamanız gerekir:
    
    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.

İstek/Yanıt Bilgileri

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.

2.jpg

Aşağıdaki temel verileri fark edeceksiniz:

  • sunucunun IP adresi ve bağlantı kurulumu;
  • orijinal HTTP isteği;
  • sunucunun yanıt durumu;
  • Content-Type, tarih ve bazı önbellek parametrelerini içeren yanıt üstbilgileri.

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 vs Wget

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:

  • cURL'de, komutları kullanırken bayrakları açıkça belirtmek gerekir: bir dosyayı kaydederken -O, bir indirmeye devam ederken -C ve yönlendirmeleri takip ederken -L ayarlayın. Bir dosyaya kaydetme seçeneği belirtilmezse, cURL'ün varsayılanı dosyanın içeriğini terminal ekranına yazdırmaktır.
  • Wget'te komutlar basittir; dosya herhangi bir ek bayrak belirtilmeden otomatik olarak indirilir, yeniden başlatma -c ile yapılır ve yönlendirmeler otomatiktir.

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.

curl-i-wget.png

Sonuç

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 yorumlar