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:
wgetdosya indirme ve arka planda çalıştırma için idealken,curlAPI'lerle çalışma, veri gönderme ve komut zincirleme (piping) için daha uygundur.
Hangi Aracı Ne Zaman Kullanmalı?
wget Kullanılması Gereken Durumlar
- Dosya indirme:
wgetvarsayılan olarak indirilen dosyayı kaydettiği için basit indirme işlemleri için idealdir.wget https://example.com/dosya.zip - Web sitesi kopyalama (mirroring):
-rbayrağı ile tüm siteyi yerel olarak kopyalayabilirsiniz.wget --mirror --convert-links https://example.com - Arka planda indirme: Uzun süren indirmeleri arka planda çalıştırmak için
-bbayrağını kullanın.wget -b https://example.com/buyukdosya.iso - Birden fazla URL'den indirme: URL'leri bir dosyadan okuyarak toplu indirme yapabilirsiniz.
wget -i urls.txt
curl Kullanılması Gereken Durumlar
- API'lerle çalışma:
curlAPI 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 - Veri gönderme (upload): Dosya veya form verisi göndermek için
curldaha uygundur.curl -F "dosya=@resim.jpg" https://example.com/upload - Komut zincirleme (piping):
curlçıktısını başka komutlara yönlendirmek kolaydır.curl https://api.example.com/veri | jq '.[] | .id' - Detaylı istek kontrolü: Özel başlıklar, kimlik doğrulama yöntemleri ve HTTP yöntemleri için
curldaha fazla seçenek sunar.curl -H "Authorization: Bearer token123" https://api.example.com/korumali - Çoklu dosya indirme:
--parallelbayrağı 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
-Obayrağı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,
curlboş 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ıjqgibi 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:


