curl ve wget: Farkları ve Hangi Durumlarda Kullanılmalı?

curl ve wget komutlarının temel farklarını, kullanım senaryolarını ve hangi aracın hangi durumlarda tercih edilmesi gerektiğini detaylı olarak açıklıyoruz.

L
Linuxize
1 görüntülenme
curl ve wget: Farkları ve Hangi Durumlarda Kullanılmalı?

Giriş

curl ve wget, URL'lerden veri indirmek veya göndermek için kullanılan iki temel komuttur. Her ikisi de HTTP, HTTPS ve FTP gibi protokollerle çalışabilirken, varsayılan davranışları ve güçlü yanları farklılık gösterir. Bu makalede, her iki aracın temel özelliklerini karşılaştırarak hangi durumlarda hangisinin tercih edilmesi gerektiğini adım adım açıklayacağız.

Temel Farklar

wget ve curl arasındaki en önemli farklar aşağıdaki tabloda özetlenmiştir:

Özellik wget curl
Birincil Amaç Dosya indirme ve web sitelerinin kopyalanması Sunucu ile veri transferi (hem gönderme hem alma)
Varsayılan Davranış İndirilen veriyi doğrudan dosyaya kaydeder Standart çıktıya (ekrana) yazar
Yinelemeli İndirme Desteklenir (-r bayrağı ile) Desteklenmez
Yönlendirmeleri Takip Etme Varsayılan olarak etkin Sadece -L bayrağı ile etkin
İndirmeyi Devam Ettirme -c bayrağı -C - bayrağı
Desteklenen Protokoller HTTP, HTTPS, FTP, FTPS HTTP, HTTPS, FTP, SFTP, SCP, SMTP ve daha fazlası
Arka Planda İndirme Desteklenir (-b bayrağı) Desteklenmez (shell job control kullanılması gerekir)
İstek ve Yük Kontrolleri Başlıklar ve yöntemler desteklenir Başlıklar, kimlik doğrulama, yükler ve istek verileri için geniş kontroller
Kütüphane Olarak Kullanım Bağımsız program libcurl kütüphanesi üzerinden uygulamalar tarafından doğrudan kullanılabilir

İpucu: wget dosya indirme ve arka planda çalıştırma için idealken, curl API'lerle çalışma, veri gönderme ve komut zincirleme (piping) için daha uygundur.

Hangi Aracı Ne Zaman Kullanmalı?

wget Kullanılması Gereken Durumlar

  1. Dosya indirme: wget varsayılan olarak indirilen dosyayı kaydettiği için basit indirme işlemleri için idealdir.
    wget https://example.com/dosya.zip
  2. Web sitesi kopyalama (mirroring): -r bayrağı ile tüm siteyi yerel olarak kopyalayabilirsiniz.
    wget --mirror --convert-links https://example.com
  3. Arka planda indirme: Uzun süren indirmeleri arka planda çalıştırmak için -b bayrağını kullanın.
    wget -b https://example.com/buyukdosya.iso
  4. Birden fazla URL'den indirme: URL'leri bir dosyadan okuyarak toplu indirme yapabilirsiniz.
    wget -i urls.txt

curl Kullanılması Gereken Durumlar

  1. API'lerle çalışma: curl API isteklerinde başlık, kimlik doğrulama ve gövde kontrolü için daha fazla esneklik sunar.
    curl -X POST -H "Content-Type: application/json" -d '{"ad":"linuxize"}' https://api.example.com/kullanicilar
  2. Veri gönderme (upload): Dosya veya form verisi göndermek için curl daha uygundur.
    curl -F "dosya=@resim.jpg" https://example.com/upload
  3. Komut zincirleme (piping): curl çıktısını başka komutlara yönlendirmek kolaydır.
    curl https://api.example.com/veri | jq '.[] | .id'
  4. Detaylı istek kontrolü: Özel başlıklar, kimlik doğrulama yöntemleri ve HTTP yöntemleri için curl daha fazla seçenek sunar.
    curl -H "Authorization: Bearer token123" https://api.example.com/korumali
  5. Çoklu dosya indirme: --parallel bayrağı ile birden fazla indirmeyi paralel olarak gerçekleştirebilirsiniz.
    curl --parallel --parallel-max 5 -O "https://example.com/dosya[1-10].zip"

Tek Tek Dosya İndirme

wget ile Tek Dosya İndirme

wget varsayılan olarak URL'nin son bileşenini dosya adı olarak kullanır ve indirilen veriyi doğrudan kaydeder:

wget https://example.com/veri.zip

Bu komut, veri.zip adında bir dosya oluşturur ve indirme ilerlemesini terminalde gösterir.

Not: Dosyaya özel bir isim vermek için -O bayrağını kullanın:

wget -O benimdosyam.zip https://example.com/veri.zip

curl ile Tek Dosya İndirme

curl varsayılan olarak indirilen veriyi standart çıktıya yazar. Dosyaya kaydetmek için -o (küçük harf) veya -O (büyük harf) bayrağını kullanın:

  • -O: URL'deki dosya adını kullanır
  • -o: Belirttiğiniz isimle kaydeder
# URL'deki isimle kaydet
curl -O https://example.com/veri.zip

# Özel isimle kaydet
curl -o benimdosyam.zip https://example.com/veri.zip

Yönlendirmeleri Takip Etme

wget ile Yönlendirmeleri Takip Etme

wget varsayılan olarak HTTP yönlendirmelerini (301, 302) otomatik olarak takip eder:

wget https://example.com/indir

curl ile Yönlendirmeleri Takip Etme

curl yönlendirmeleri varsayılan olarak takip etmez. Takip etmek için -L bayrağını kullanın:

curl -L -O https://example.com/indir

Uyarı: Yönlendirmeleri takip etmezseniz, curl boş bir dosya veya beklenmedik küçük bir dosya ile karşılaşabilirsiniz.

Kesintiye Uğramış İndirmeyi Devam Ettirme

wget ile Devam Ettirme

wget kesintiye uğramış bir indirmeyi devam ettirmek için -c bayrağını kullanır:

wget -c https://example.com/buyukdosya.iso

Sunucu Range başlığını destekliyorsa, indirme kaldığı yerden devam eder.

curl ile Devam Ettirme

curl ile devam ettirmek için -C - bayrağını kullanın. Bu, yerel dosyanın boyutuna göre otomatik olarak devam noktasını belirler:

curl -C - -O https://example.com/buyukdosya.iso

Önemli: Devam ettirme işlemi sunucu tarafından desteklenmelidir. Desteklenmiyorsa, indirme baştan başlar.

Yinelemeli İndirme (Recursive Download)

wget ile Yinelemeli İndirme

wget web sayfalarını tarayarak bağlı tüm dosyaları indirebilir. Bu özellik, özellikle web sitelerini kopyalamak için kullanışlıdır:

# Tüm bağlantıları takip ederek indir
wget -r https://example.com/dizin/

# Yalnızca belirli bir derinliğe kadar indir
wget -r -l 2 https://example.com/

# Bağlantıları yukarı doğru takip etme (üst dizinlere çıkmama)
wget -r -np https://example.com/dizin/

# Sadece belirli dosya türlerini indir
wget -r -A pdf,jpg https://example.com/

Uyarı: Yinelemeli indirme büyük miktarda veri indirebilir. Güvenlik ve performans için indirmeyi sınırlandırın.

curl ile Yinelemeli İndirme

curl yinelemeli indirmeyi desteklemez. Birden fazla URL'yi paralel olarak indirmek için --parallel bayrağını kullanabilirsiniz:

curl --parallel --parallel-max 5 -O "https://example.com/dosya[1-10].zip"

API'lerle Çalışma

curl ile API'ye Veri Gönderme

curl API'lerle çalışmak için daha geniş özellikler sunar. Örneğin, bir REST API'ye JSON verisi göndermek için:

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer token123" \
  -d '{"ad":"Linux", "surum":"5.15"}' \
  https://api.example.com/sistemler

wget ile API'ye Veri Gönderme

wget de API'lerle çalışabilir, ancak curl kadar esnek değildir. Örneğin, bir GET isteği göndermek için:

wget --header="Content-Type: application/json" \
  --post-data='{"ad":"Linux"}' \
  https://api.example.com/sistemler

İpucu: API yanıtlarını işlemek için curl çıktısını jq gibi bir JSON işleyiciye yönlendirebilirsiniz:

curl -s https://api.example.com/sistemler | jq '.[] | .ad'

Arka Planda İndirme

wget ile Arka Planda İndirme

wget indirme işlemini arka plana almak için -b bayrağını kullanır. İndirme ilerlemesi wget-log dosyasına kaydedilir:

wget -b https://example.com/buyukdosya.iso

# Özel log dosyası belirtme
wget -b -o indirme.log https://example.com/buyukdosya.iso

curl ile Arka Planda İndirme

curl doğrudan arka plana alma özelliği sunmaz. Bunun yerine, shell job control, nohup, screen veya tmux gibi araçları kullanın:

# shell job control kullanımı
curl -O https://example.com/buyukdosya.iso &

# nohup kullanımı
nohup curl -O https://example.com/buyukdosya.iso > /dev/null 2>&1 &

# tmux kullanımı
tmux new -s indirme
tmux send-keys -t indirme "curl -O https://example.com/buyukdosya.iso" C-m

Özet ve Sonuç

wget ve curl arasındaki seçim, yapmak istediğiniz göreve bağlıdır:

  • wget kullanın:
    • Dosya indirme ve kaydetme
    • Web sitelerini kopyalama (mirroring)
    • Arka planda indirme
    • Toplu indirme (URL listesi ile)
    • Yinelemeli indirme
  • curl kullanın:
    • API'lerle çalışma
    • Veri gönderme (upload)
    • Komut zincirleme (piping)
    • Özel başlıklar ve kimlik doğrulama
    • Detaylı istek kontrolü
    • Çoklu indirmeyi paralel olarak gerçekleştirme

Son Öneri: Her iki aracı da komut satırında kullanmayı öğrenin ve projelerinizde hangisinin daha uygun olduğunu değerlendirin. İhtiyacınıza en uygun aracı seçmek, daha verimli ve güvenilir iş akışları oluşturmanıza yardımcı olacaktır.

Daha fazla örnek ve detaylı kullanım kılavuzları için aşağıdaki kaynaklara göz atabilirsiniz:

Kaynak

Linuxize