wget, Wget2 ve Modern Dosya İndirme

wget'in temellerinden Wget2'nin çok kanallı yapısına, HTTP/2 desteğinden TLS 1.3 güvenliğine, bot koruma stratejilerinden curl karşılaştırmasına ve Python subprocess entegrasyonuna uzanan kapsamlı bir rehber.

Ceyhun Enki Aksan
Ceyhun Enki Aksan Girişimci, Maker

TL;DR

Konu20192026
Sürümwget 1.20.xWget2 2.2.1 / wget 1.25.0
ProtokolHTTP/1.1HTTP/2 (Wget2)
İndirmeTek kanalÇok kanallı (5 iş parçacığı)
Sıkıştırmagzip, deflatebrotli, zstd, lzip, xz
TLSTLS 1.2 yaygınTLS 1.3 zorunlu
HSTSTemelTam RFC 6797 (Wget2)
Bot KorumasıUser-Agent yeterliJA3 parmak izi, JS challenge

Bu yazının ilk versiyonu 2019 yılında yayınlanmıştı. O tarihten bu yana internetin protokol seviyesinde yaşadığı dönüşüm (HTTP/2, TLS 1.3), bot koruma ekosistemindeki gelişmeler ve Wget2’nin stabil hale gelmesi, wget’i sadece “dosya indiren araç” olmaktan çıkarıp modern web mimarisine uyum sağlaması gereken bir uç noktaya dönüştürdü.

wget Temelleri

GNU Wget, internet üzerinden komut satırı kullanarak dosya indirmeyi sağlayan bir indirme yöneticisidir. Adı World Wide Web ve get kelimelerinden türetilmiştir. HTTP, HTTPS ve FTP protokolleri üzerinden indirme işlemleri gerçekleştirebilmekte; özyinelemeli (recursive) site indirme, kesintili indirmeyi devam ettirme ve bant genişliği sınırlandırma gibi temel işlevler sunmaktadır1.

En temel kullanımı:

wget [URL]

Sık Kullanılan Parametreler

ParametreAçıklamaÖrnek
-OÇıktı dosya adı belirtwget -O veri.zip [URL]
-cYarım kalan indirmeyi devam ettirwget -c [URL]
-rÖzyinelemeli indirmewget -r [URL]
-mSite kopyalama (mirror)wget -m [URL]
-PHedef dizin belirtwget -P /indirilen/ [URL]
-iDosya listesinden indirwget -i liste.txt
-qSessiz mod (çıktı yok)wget -q [URL]
--limit-rateBant genişliği sınırlawget --limit-rate=500k [URL]
-AYalnızca belirli türleri indirwget -r -A jpg,png [URL]
-RBelirli türleri hariç tutwget -r -R tar.gz [URL]
--user-agentUser-Agent string’i belirtwget --user-agent="..." [URL]
-npÜst dizine çıkmawget -r -np [URL]

Site Kopyalama (Mirror)

wget’in en güçlü özelliklerinden biri, bir web sitesinin çevrimdışı kopyasını oluşturabilmesidir:

wget --mirror --convert-links --page-requisites --no-parent \
  -P ./site-kopyasi https://ornek.com/dokumantasyon/

--convert-links parametresi, indirilen HTML dosyalarındaki bağlantıları yerel yollara dönüştürerek çevrimdışı görüntülemeyi mümkün kılmakta. Bu özellik, curl’ün sunmadığı ve wget’i belirli senaryolarda vazgeçilmez kılan bir kapasitedir.


Wget2: Sessiz Devrim

2019’dan bu yana wget ekosistemindeki en önemli gelişme, orijinal wget’in halefi olan Wget2’nin stabil hale gelmesidir. En güncel sürümü 2.2.1 (Ocak 2026) ile aktif geliştirmeye devam etmekte2.

wget vs Wget2

Özellikwget (1.x)Wget2 (2.x)
HTTP/2DesteklenmezTam destek (nghttp2)
Çok kanallı indirmeYokVarsayılan 5 iş parçacığı
Sıkıştırmagzip, deflatebrotli, zstd, lzip, bzip2, xz
HSTSTemelTam RFC 6797, varsayılan açık
HPKPYokRFC 7469 (kalıcı veritabanı)
TCP Fast OpenYokDestekleniyor
TLS Session ResumptionYokKalıcı önbellek ile
Tek dosya parçalı indirmeYok--chunk-size ile
RSS/Atom/SitemapYokDestekleniyor
FTPTam destekSınırlı
WARC çıktıDestekleniyorHenüz yok

Çok Kanallı İndirme

Wget2’nin en belirgin avantajı, çok kanallı (multi-threaded) indirme desteğidir. Orijinal wget dosyaları tek kanal üzerinden indirirken, Wget2 varsayılan olarak 5 eşzamanlı bağlantı kullanmakta:

# Paralel indirme (varsayılan 5 iş parçacığı)
wget2 https://ornek.com/buyuk-dosya.tar.gz

# Tek dosyayı parçalara bölerek indir
wget2 --chunk-size=10M https://ornek.com/buyuk-dosya.tar.gz

--chunk-size parametresi, tek bir büyük dosyayı belirtilen boyutta parçalara ayırarak paralel indirme sağlamakta. Bu özellik, yüksek bant genişliğine sahip bağlantılarda belirgin performans artışı sunmakta.

HTTP/2 Desteği

Wget2, nghttp2 ve GnuTLS ALPN üzerinden tam HTTP/2 desteği sunmakta. HTTP/2’nin çoğullama (multiplexing) özelliği sayesinde tek bir TCP bağlantısı üzerinden birden fazla istek aynı anda gönderilebilmekte:

# HTTP/2 otomatik kullanılır (sunucu destekliyorsa)
wget2 https://ornek.com/dosya.zip

HTTP/3 (QUIC) desteği Wget2’nin geliştirme dalında (branch) mevcut ancak henüz stabil sürüme dahil edilmemiştir.

Sıkıştırma Desteği

Wget2, brotli ve zstd dahil modern sıkıştırma algoritmalarını desteklemekte. Accept-Encoding başlığı otomatik olarak desteklenen algoritmaları bildirmekte:

# Desteklenen algoritmalar: brotli, zstd, lzip, bzip2, xz, gzip, deflate
wget2 --compression=zstd https://ornek.com/veri.json

Dağıtım Desteği

Fedora 40 ve sonrasında Wget2, wget2-wget paketi ile varsayılan wget komutu olarak gelmekte3. Bu durum, Wget2’nin üretim ortamı için hazır olduğunun en güçlü göstergesi. Debian, Ubuntu, Alpine ve Arch Linux depolarında da mevcut:

# Fedora (varsayılan olarak gelir)
dnf install wget2-wget

# Debian/Ubuntu
apt install wget2

# macOS
brew install wget2

Güvenlik ve Modern TLS

2019’da TLS 1.1 ve 1.2 yaygınken, 2026 itibarıyla TLS 1.3 standart haline geldi. Bu değişim wget ekosistemini de doğrudan etkilemekte.

TLS 1.3 Desteği

wget 1.19.5’ten bu yana GnuTLS üzerinden TLS 1.3 desteklemekte. wget 1.21.3 ile komut satırından TLS sürümü seçimi de mümkün hale geldi. Wget2 ise TLS False Start ve kalıcı önbellekli TLS Session Resumption ile daha ileri güvenlik özellikleri sunmakta4.

HSTS (HTTP Strict Transport Security)

Wget2, RFC 6797 uyumlu tam HSTS desteğini varsayılan olarak etkinleştirmekte ve kalıcı veritabanında HSTS bilgilerini saklamakta. Bu sayede bir site “beni yalnızca HTTPS üzerinden çağır” talimatı verdiğinde, sonraki isteklerde otomatik olarak HTTPS’e yönlendirme yapılmakta.

--no-check-certificate Artık Kötü Pratik

Let’s Encrypt’in yaygınlaşmasıyla birlikte, geçerli TLS sertifikası olmayan sunucu sayısı belirgin şekilde azaldı. --no-check-certificate sertifika doğrulamasını tamamen devre dışı bırakarak ortadaki adam (MITM) saldırılarına kapı açmakta:

# Kötü pratik
wget --no-check-certificate https://ornek.com/dosya.zip

# Doğru yaklaşım: Sistem sertifikalarını güncelle
sudo update-ca-certificates

# Veya özel CA dosyası belirt
wget --ca-certificate=/yol/ca-bundle.crt https://ornek.com/dosya.zip

Güvenlik Açıkları

CVECVSSEtkilenenAçıklama
CVE-2024-384289.1 (Kritik)wget 1.24.5 ve öncesiURI ayrıştırmada noktalı virgül, ana bilgisayar ayırıcısı olarak yorumlanarak SSRF’e yol açmakta5
CVE-2024-10524Ortawget 1.24.5 ve öncesiHTTP kısayol SSRF açığı, 1.25.0 ile düzeltildi
CVE-2025-691948.8 (Yüksek)Wget2Metalink dosya üzerine yazma açığı, 2.2.1 ile düzeltildi6

wget 1.25.0 (Kasım 2024) bu açıkları yamalarken, önemli bir kırılma değişikliği de getirmiştir: kısayol URL formatı (wget kullanici:sifre@sunucu) kaldırılmış; tam URL belirtilmesi zorunlu hale gelmiştir.


Bot Korumalarını Anlamak

E-ticaret siteleri ve veri kaynakları, wget gibi araçları tespit etmek için giderek daha agresif korumalar kullanmakta. Modern bot tespit sistemleri dört katmanda çalışmakta7:

1. User-Agent Analizi

wget varsayılan olarak Wget/1.25.0 (veya Wget2/2.2.1) string’i göndermekte. Bu string, Cloudflare ve Akamai gibi WAF sistemleri tarafından anında tanınmakta:

# Bloklanma riski yüksek
wget https://ornek.com/veri.csv

# Modern tarayıcı string'i ile
wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0" \
  https://ornek.com/veri.csv

2. TLS/JA3 Parmak İzi

Modern bot koruma sistemleri, TLS el sıkışması (handshake) sırasında gönderilen şifreleme paketleri, uzantılar ve TLS sürümünden oluşan benzersiz bir “JA3 parmak izi” oluşturmakta. wget ve curl’ün parmak izleri, tarayıcılardan farklı olup anti-bot servisleri bu parmak izlerinin veritabanlarını tutmakta.

3. HTTP/2 Çerçeve Sıralaması

HTTP/2 destekleyen araçlar bile (curl, httpx) çerçeve sıralaması ve ayarları üzerinden parmak izi alınabilmekte.

4. JavaScript Challenge

wget JavaScript çalıştıramadığından, Cloudflare Turnstile veya Akamai sensor data gibi JS tabanlı korumalar wget’i tamamen engellemekte.

İnsansı Davranış Stratejisi

wget --continue --tries=10 \
  --wait=2 --random-wait \
  --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0" \
  --limit-rate=500k \
  [URL]

--random-wait parametresi, --wait ile belirtilen sürenin 0.5x ile 1.5x arasında rastgele bir değerini kullanarak istek zamanlamasını insansı hale getirmekte. --limit-rate ise hedef sunucuyu yormamak için bant genişliğini sınırlandırmakta.

robots.txt: wget, özyinelemeli indirmelerde robots.txt dosyasını varsayılan olarak okumakta. Etik sınırlar dahilinde analiz yapılıyorsa -e robots=off ile devre dışı bırakılabilir, ancak bu yaklaşım sorumlu kullanım gerektirir.


wget vs curl: 2026 Perspektifi

Geliştirici dünyasında wget ve curl sıklıkla karşılaştırılmakta, ancak iki araç farklı felsefeler üzerine inşa edilmiştir8.

Protokol Desteği

Protokolcurlwget (1.x)Wget2
HTTP/1.xEvetEvetEvet
HTTP/2EvetHayırEvet
HTTP/3 (QUIC)DeneyselHayırGeliştirmede
FTP/FTPSEvetEvetSınırlı
SCP/SFTPEvetHayırHayır
SMTP/POP3/IMAPEvetHayırHayır
Toplam protokol~263~3

Felsefi Fark

curl, cat gibi boru hattı odaklı bir araçtır: veriyi stdout’a yazar, diğer araçlarla zincirlenir. wget ise cp gibi dosya kopyalama odaklıdır: dosyayı diske yazar, kesintide devam eder, dizin yapısını korur.

curl’ün arkasında libcurl kütüphanesi bulunmakta ve binlerce uygulama tarafından kullanılmakta. Wget2’nin libwget kütüphanesi henüz bu yaygınlığa ulaşmamıştır.

Hangi Durumda Hangisi?

Senaryowget / Wget2curl
Özyinelemeli site indirme--mirror, --convert-linksDesteklemez
Çevrimdışı site kopyası--mirror -p --convert-linksDesteklemez
Kesintili büyük dosya-c (devam ettirme)--continue-at -
API testiSınırlıTam destek (tüm HTTP metodları)
JSON gönderme/almaZor--json, -d
Boru hattı entegrasyonu-O - ile mümkünVarsayılan (stdout)
Çoklu protokolHTTP/FTP26 protokol
Liste bazlı indirme-i liste.txtDesteklemez

Kısaca: dosya indirme ve site kopyalama için wget, API etkileşimi ve boru hattı operasyonları için curl.


Modern Alternatifler

aria2

aria2, çoklu protokol (HTTP, FTP, SFTP, BitTorrent, Metalink) ve çoklu kaynak indirme desteği sunan hafif bir indirme yöneticisidir9. En güncel sürümü 1.37.0 (Kasım 2023). Tek bir dosyayı birden fazla kaynaktan aynı anda indirerek hızı artırabilmekte. JSON-RPC ve XML-RPC arayüzü ile uzaktan kontrol edilebilmekte:

# Çoklu kaynak indirme
aria2c -x 16 https://ornek.com/buyuk-dosya.tar.gz

# BitTorrent
aria2c dosya.torrent

# RPC modu (web arayüzü ile kontrol)
aria2c --enable-rpc

aria2, saf indirme performansında (özellikle çoklu kaynak ve torrent) öne çıkarken, wget2 web tarama (crawling), site kopyalama ve modern HTTP özellikleri (HTTP/2, brotli) konusunda avantajlı konumda.

curl-impersonate

Modern bot korumalarını aşmak için geliştirilen curl-impersonate, curl’ün bir fork’udur ve tarayıcı TLS parmak izlerini taklit etmekte. JA3 tabanlı tespitlere karşı etkili bir çözüm sunmakta.

Karşılaştırma Tablosu

AraçHTTP/2Çok KanallıÖzyinelemeliBitTorrentSıkıştırma
wget 1.xHayırHayırEvetHayırgzip
Wget2EvetEvet (5)EvetHayırbrotli, zstd
curlEvetHayırHayırHayırbrotli, zstd
aria2HayırEvet (16)HayırEvetHayır

Python subprocess Entegrasyonu

wget’i Python’dan çağırmak, belirli senaryolarda anlamlı bir yaklaşım olabilir. Ancak varsayılan olarak native Python kütüphaneleri tercih edilmelidir.

subprocess ile wget Ne Zaman Anlamlı?

Özyinelemeli site indirme: wget’in --mirror özelliğini Python kütüphaneleri yeterince karşılayamamakta:

import subprocess

# Site kopyalama
result = subprocess.run([
    "wget", "--mirror", "--convert-links",
    "--page-requisites", "--no-parent",
    "-P", "./site-kopyasi",
    "https://ornek.com/dokumantasyon/"
], capture_output=True, text=True, timeout=600)

Kesintili büyük dosya transferi: wget’in -c parametresi savaş alanında test edilmiş bir mekanizma:

import subprocess

result = subprocess.run([
    "wget", "-c", "--tries=10",
    "--limit-rate=500k",
    "-O", "veri.tar.gz",
    "https://ornek.com/buyuk-veri.tar.gz"
], capture_output=True, text=True, timeout=3600)

Native Python Kütüphaneleri Ne Zaman Tercih Edilmeli?

API etkileşimi, asenkron istek yönetimi ve yanıt verilerinin doğrudan işlenmesi gereken senaryolarda native kütüphaneler daha uygundur:

import httpx

# HTTP/2 destekli asenkron istek
async with httpx.AsyncClient(http2=True) as client:
    response = await client.get("https://api.ornek.com/veri")
    data = response.json()

Kütüphane Karşılaştırması

KütüphaneAsenkronHTTP/2En Uygun Senaryo
requestsHayırHayırBasit betikler, hızlı otomasyon
httpxEvetEvetModern asenkron kod, HTTP/2
aiohttpEvetHayırYüksek eşzamanlılık
subprocess+wgetHayırHayır (wget1), Evet (wget2)Özyinelemeli indirme, site kopyalama
subprocess+aria2RPC ileHayırÇoklu kaynak, torrent

Pipeline Yaklaşımı

wget ile indirilen dosyaları doğrudan bir veri işleme hattına sokmak istediğinizde subprocess ile sarmalama mantıklı hale gelmekte:

import subprocess
import pandas as pd
from pathlib import Path

def indir_ve_isle(url: str, hedef: Path) -> pd.DataFrame:
    """wget ile indir, ardından pandas ile işle."""
    result = subprocess.run(
        ["wget", "-q", "-O", str(hedef), url],
        capture_output=True, text=True, timeout=120
    )
    if result.returncode != 0:
        raise RuntimeError(f"wget hatası: {result.stderr}")
    return pd.read_csv(hedef)

# Kullanım
df = indir_ve_isle(
    "https://veri.ornek.com/dataset.csv",
    Path("/tmp/dataset.csv")
)

Bu yaklaşım, wget’in kesintili indirme ve bant genişliği kontrolü özelliklerini Python’un veri işleme yetenekleriyle birleştirmekte.


2026 Best Practice Rehberi

Modern wget Komutu

wget --continue --tries=10 \
  --wait=2 --random-wait \
  --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0" \
  --limit-rate=500k \
  [URL]

Wget2 ile Modern İndirme

wget2 --chunk-size=10M --progress=bar \
  https://ornek.com/buyuk-dosya.tar.gz

Güvenli Site Kopyalama

wget --mirror --convert-links --page-requisites \
  --no-parent --wait=1 --random-wait \
  --user-agent="Mozilla/5.0 Chrome/120.0.0.0" \
  -P ./site-kopyasi https://ornek.com/

Güvenlik Kontrol Listesi

# Sürüm kontrolü
wget --version | head -1
# wget2 varsa tercih et
wget2 --version 2>/dev/null && echo "wget2 mevcut"

# --no-check-certificate KULLANMA
# Bunun yerine sistem sertifikalarını güncelle
sudo update-ca-certificates

Sonuç

wget, GNU ekosisteminin temel indirme aracı olarak konumunu korumakta. Ancak modern web mimarisinin gereksinimleri (HTTP/2, TLS 1.3, bot korumaları), orijinal wget’in kapasitelerini aşmış durumda. Wget2, çok kanallı indirme, brotli/zstd sıkıştırma ve tam HSTS desteğiyle bu boşluğu doldurmakta ve Fedora’nın varsayılan wget olarak benimsemesiyle üretim ortamı için hazır olduğunu kanıtlamakta.

Geliştirici iş akışlarında wget ve curl birbirinin alternatifi değil, tamamlayıcısıdır. Site kopyalama ve büyük dosya indirme için wget, API etkileşimi ve boru hattı operasyonları için curl kullanılmalıdır. Python ekosisteminde ise subprocess ile wget entegrasyonu, özyinelemeli indirme ve kesintili transfer senaryolarında anlamlı bir yaklaşım olarak öne çıkmakta.

wget ile ilişkili diğer konular hakkında rsync, grep, crontab ve veri kazıma yazılarına göz atabilirsiniz.

Footnotes

  1. GNU Wget
  2. GNU Wget2 2.2.1 Release
  3. Fedora Wget2asWget Change
  4. rsync 3.2.0 NEWS - TLS ve sıkıştırma referansı
  5. CVE-2024-38428 - JFrog Analysis
  6. CVE-2025-69194 - Wget2 Metalink Vulnerability
  7. Cloudflare User Agent Blocking
  8. curl vs wget - Daniel Stenberg
  9. aria2 - Multi-protocol Download Utility