wget, Linux ve macOS sistemlerde çoğunlukla hazır gelen, dosya indirmek ve web sayfalarını çekmek için kullanılan bir komut satırı aracıdır. Sunucularda betik içinden dosya indirmek, bir siteyi yansılamak ya da basit bir erişim testi yapmak için sıkça tercih edilir. Bu yazıda wget'i proxy üzerinden çalıştırmanın üç yolunu, kimlik doğrulamayı, HTTPS ayrıntılarını, toplu indirmelerde dikkat edilecekleri ve sık karşılaşılan hataları örnek komutlarla anlatıyoruz.
Anlatılan seçeneklerin tamamı GNU Wget kılavuzunda belgelenmiştir.
Başlamadan önce: wget kurulu mu?
Terminalde sürümü kontrol edin:
wget --versionKomut bulunamazsa Debian ve Ubuntu'da sudo apt install wget, macOS'ta Homebrew ile brew install wget kullanabilirsiniz. Windows'ta wget yerleşik değildir; aynı işler için Windows 10 ve sonrasında gelen curl.exe tercih edilebilir. PowerShell'deki wget yazımı ise gerçek wget değil, Invoke-WebRequest komutunun takma adıdır ve bu yazıdaki seçenekleri kabul etmez.
Denemelerde IP adresinizi döndüren bir test adresi kullanmak işinizi kolaylaştırır. Proxy çalışıyorsa bu adres sizin değil, proxy'nin IP'sini gösterir:
wget -qO- https://httpbin.org/ipBuradaki -q çıktıyı sessizleştirir, -O- ise indirilen içeriği dosyaya yazmak yerine ekrana basar. Proxy tanımlamadan önce bir kez çalıştırıp kendi IP'nizi not edin; sonraki denemelerde farkı hemen görürsünüz.
Proxy adresinin biçimi
Üç yöntemde de proxy aynı biçimde yazılır:
http://kullanici:parola@sunucu:porthttp://şeması, proxy ile kurulan bağlantının protokolüdür. HTTPS sitelere giderken de bu şema kullanılır; nedenini aşağıda açıklıyoruz.kullanici:parola@bölümü isteğe bağlıdır. Proxy panelinizden sunucunuzun IP'sini yetkilendirdiyseniz bu bölümü tamamen bırakabilirsiniz.sunucu:portbilgisi paketinize göre değişir; doğru değerleri müşteri panelinizde bulabilirsiniz.
Yöntem 1: Ortam değişkenleriyle
wget, sistemdeki standart proxy ortam değişkenlerini okur: http_proxy, https_proxy, ftp_proxy ve no_proxy. En hızlı yöntem budur ve aynı terminalde çalışan diğer birçok araç da bu değişkenleri kullanır.
export http_proxy="http://kullanici:parola@pr.proxynet.io:8000"
export https_proxy="http://kullanici:parola@pr.proxynet.io:8000"
wget -qO- https://httpbin.org/ipDikkat edilecek üç nokta var:
https_proxydeğeri dehttp://ile başlar. Bu değişken HTTPS sitelere giderken kullanılacak proxy'yi belirtir; proxy ile kurulan bağlantının kendisi HTTP'dir ve HTTPS trafiği bu bağlantının içinde tünellenir.- Değişkenler yalnızca o terminal oturumunda geçerlidir. Kalıcı olsun istiyorsanız
~/.bashrcveya~/.zshrcdosyasına ekleyin. - Küçük harf yazımı tercih edin. wget küçük harfli değişkenleri okur; bazı sistemlerde büyük harfli
HTTP_PROXYde tanımlı olabilir ve iki tanım çelişirse kafa karıştırır. İkisini aynı değere ayarlamak en güvenlisidir.
Belirli adreslerin proxy'ye gitmemesini istiyorsanız no_proxy kullanın:
export no_proxy="localhost,127.0.0.1,.sirketiniz.local"Bu değişken, iç ağdaki servislerin ya da yerel geliştirme sunucularının proxy üzerinden dolaşmasını önler. Nokta ile başlayan bir alan adı, o alanın tüm alt alanlarını kapsar.
Yöntem 2: Komut satırında, tek seferlik
Ortam değişkenlerini değiştirmeden yalnızca tek bir komutu proxy'den geçirmek için -e (--execute) seçeneğiyle wget ayarlarını doğrudan komuta verebilirsiniz:
wget -e use_proxy=yes \
-e https_proxy=http://pr.proxynet.io:8000 \
--proxy-user=kullanici \
--proxy-password=parola \
https://httpbin.org/ip -O -Bu yöntem betiklerde özellikle kullanışlıdır: Proxy ayarı başka komutları etkilemez ve her çağrıda farklı bir proxy verebilirsiniz. Örneğin bir döngü içinde her indirmeyi farklı bir çıkış noktasından yapmak isterseniz -e https_proxy= değerini döngü değişkeninden alırsınız.
-e ile verilen her satır, .wgetrc dosyasına yazılabilen bir ayardır. Yani aşağıdaki yöntemde göreceğiniz her anahtar burada da geçerlidir.
Yöntem 3: .wgetrc dosyasıyla, kalıcı olarak
Aynı makinede wget'i sürekli proxy ile kullanıyorsanız ayarları kullanıcı dizininizdeki ~/.wgetrc dosyasına yazabilirsiniz:
use_proxy = on
http_proxy = http://pr.proxynet.io:8000
https_proxy = http://pr.proxynet.io:8000
proxy_user = kullanici
proxy_password = parolaDosyada parola bulunduğu için yalnızca sizin okuyabileceğiniz şekilde izinleri kısıtlayın:
chmod 600 ~/.wgetrcSistem genelinde bir ayar gerekiyorsa aynı satırlar /etc/wgetrc dosyasına yazılabilir; kullanıcı dizinindeki dosya sistem dosyasındaki değerleri geçersiz kılar.
Bu dosya tanımlıyken proxy'yi geçici olarak devre dışı bırakmak isterseniz tek bir komut için --no-proxy seçeneğini ekleyin:
wget --no-proxy https://httpbin.org/ip -O -Hangi yöntemi seçmeli?
| Durum | Önerilen yöntem |
|---|---|
| Terminalde hızlı bir test | Ortam değişkeni |
| Betikte, her çağrıda farklı proxy | -e ile komut satırı |
| Sunucuda sürekli proxy kullanımı | .wgetrc |
| Belirli adresleri proxy dışında tutmak | no_proxy |
| cron ile zamanlanmış indirme | .wgetrc (cron ortam değişkenlerini taşımaz) |
| Docker konteyneri içinde | Ortam değişkeni (ENV ile) |
Üç yöntem aynı anda tanımlıysa öncelik sırası şöyledir: komut satırı seçenekleri ortam değişkenlerini, ortam değişkenleri de .wgetrc dosyasını geçersiz kılar.
HTTPS sitelerde proxy nasıl çalışır?
HTTPS bir adrese proxy üzerinden giderken wget, proxy'ye önce CONNECT hedef:443 isteği gönderir. Proxy hedefle bir TCP bağlantısı açar ve bundan sonra yalnızca şifreli baytları aktarır. Yani proxy, sitenin içeriğini göremez; yalnızca hangi alan adına bağlanıldığını bilir.
Bunun pratik sonucu şudur: Proxy adresi http:// ile başlasa bile HTTPS sitelere güvenle gidebilirsiniz. Sertifika doğrulaması sizin makineniz ile hedef site arasında yapılır, proxy bu doğrulamaya karışmaz. Proxy'nin bu davranışını ve SOCKS ile farkını SOCKS ve HTTP Proxy Farkı yazımızda karşılaştırdık.
Sık kullanılan seçeneklerle birlikte
Proxy ayarı tek başına nadiren yeterlidir; gerçek işlerde birkaç seçenek daha gerekir. Aşağıdaki örnek, proxy üzerinden bir dosyayı yeniden deneme ve zaman aşımı ayarlarıyla indirir:
wget --timeout=30 --tries=3 --waitretry=5 \
--user-agent="Mozilla/5.0 (X11; Linux x86_64)" \
-O rapor.pdf https://example.com/rapor.pdf--timeouther ağ işlemi için bekleme süresini sınırlar.--triesbaşarısız indirmeyi kaç kez deneyeceğini belirler;--waitretrydenemeler arasına bekleme koyar.--user-agenttarayıcı kimliğini değiştirir. wget'in varsayılan kimliği bazı sitelerde doğrudan engellenir; tanıtıcı bir değer kullanmak hem daha şeffaf hem de daha az sorunludur.-Oçıktı dosyasını adlandırır;-ceklerseniz yarım kalan indirmeye kaldığı yerden devam eder.
Sayfa çekerken çerez gerekiyorsa --load-cookies ve --save-cookies seçenekleri oturumu dosyada tutar; giriş yapılmış bir oturumu proxy ile birlikte sürdürmek bu şekilde mümkündür.
wget SOCKS proxy destekliyor mu?
GNU wget'in yerleşik bir SOCKS desteği yoktur; yukarıdaki yöntemlerin hepsi HTTP ve HTTPS proxy içindir. SOCKS5 kullanmanız gerekiyorsa iki seçeneğiniz var:
- cURL kullanmak. cURL,
socks5://vesocks5h://şemalarını doğrudan destekler ve wget'in yaptığı hemen her işi yapar. Ayrıntılar cURL ile Proxy Nasıl Kullanılır? yazımızda. - Bir yönlendirme aracı kullanmak. Linux'ta
proxychainsgibi araçlar, SOCKS desteği olmayan programların bağlantılarını SOCKS proxy'ye yönlendirebilir. Windows'ta aynı işi Proxifier yapar.
wget ile doğrudan çalışan paketler için HTTPS Proxy sayfasına göz atabilirsiniz.
Sık görülen hatalar ve çözümleri
"407 Proxy Authentication Required"
Proxy kimlik bilgileri eksik veya yanlış. Kullanıcı adı ile parolayı kontrol edin. Parolada @, : veya # gibi özel karakterler varsa bunları adresin içinde yüzde kodlamasıyla yazın (@ için %40) ya da --proxy-user ve --proxy-password seçeneklerini kullanın; bu seçenekler kodlama gerektirmez.
Komut proxy'yi hiç kullanmıyor
- Değişkeni
exportile tanımladığınızdan emin olun; yalnızcahttp_proxy=...yazmak onu alt süreçlere aktarmaz. - HTTPS bir adrese gidiyorsanız
http_proxydeğilhttps_proxydeğişkeninin tanımlı olması gerekir. .wgetrciçindeuse_proxy = offsatırı olup olmadığını kontrol edin.sudo wgetçalıştırıyorsanız,sudovarsayılan olarak ortam değişkenlerinizi taşımayabilir;sudo -Eile taşıyın ya da ayarı/etc/wgetrcdosyasına yazın.- Hedef adres
no_proxylistesindeki bir alanla eşleşiyor olabilir.
"Unable to establish SSL connection"
Önce hedef adresin proxy olmadan açılıp açılmadığını kontrol edin. Sorun sertifikadaysa --no-check-certificate seçeneği doğrulamayı atlar; ancak bu seçenek bağlantının güvenliğini zayıflatır ve yalnızca test amacıyla kullanılmalıdır. Proxy'nin sertifika doğrulamasına karışmadığını hatırlayın: Bu hata genellikle sistemdeki kök sertifika deposunun eski olmasından ya da hedef sitenin yapılandırmasından kaynaklanır.
Bağlantı zaman aşımına uğruyor
Proxy adresini ve portu yeniden kontrol edin. Güvenlik duvarının proxy portuna giden trafiğe izin verdiğinden emin olun. Uzun indirmelerde zaman aşımını ve yeniden deneme sayısını açıkça belirlemek betiklerin takılmasını önler:
wget --timeout=30 --tries=3 https://httpbin.org/ip -O -"ERROR 403: Forbidden"
Hedef site isteği reddediyor. Nedeni proxy olmayabilir; wget'in varsayılan User-Agent değeri bazı sitelerde doğrudan engellenir. --user-agent ile tanıtıcı bir değer verin. Sorun devam ediyorsa hedef site proxy'nin IP türüne göre davranıyor olabilir; veri merkezi adreslerinin neden daha sık reddedildiğini Residential ve Datacenter Proxy Farkı yazımızda anlattık.
Toplu indirmelerde dikkat edilmesi gerekenler
wget'in -r (özyinelemeli indirme) seçeneği bir sitenin tamamını tek komutla çekebilir. Bu güç, hedef sunucuya ciddi yük bindirebilir. Toplu indirmelerde şu seçenekler hem sizin hem hedefin yararınadır:
wget -r -l 2 --wait=2 --random-wait --limit-rate=500k \
--no-parent -A pdf https://example.com/belgeler/-l 2derinliği iki seviyeyle sınırlar; sınırsız derinlik tüm siteyi indirir.--wait=2istekler arasına iki saniye koyar,--random-waitbu süreyi rastgele değiştirir.--limit-rate=500kindirme hızını sınırlar.--no-parentüst dizinlere çıkmayı engeller,-A pdfyalnızca belirtilen uzantıları alır.
wget varsayılan olarak robots.txt kurallarına uyar; bu davranışı kapatmayın. Hangi verinin hangi koşullarda toplanabileceğini Web Scraping Yasal mı? yazımızda anlattık.
Çok sayıda istek gerektiren projelerde trafiği tek bir IP'ye yığmak yerine Rotating Proxy ile adresleri dağıtmak hem engellenme riskini azaltır hem de hedef siteye daha dengeli bir yük bindirir. Daha kapsamlı ihtiyaçlar için veri kazıma çözümlerimize bakabilirsiniz.
Sık sorulan sorular
wget mi cURL mü?
Dosya indirme, yansılama ve özyinelemeli çekim için wget daha pratiktir; API istekleri, özel HTTP yöntemleri ve SOCKS proxy için cURL daha yeteneklidir. İkisi de HTTP proxy'yi aynı ortam değişkenlerinden okur, bu yüzden bir kez tanımlanan ayar iki araçta da çalışır.
Proxy ayarı diğer programları etkiler mi?
Ortam değişkeniyle tanımlanan proxy, aynı kabuktan başlatılan ve bu değişkenleri okuyan her programı etkiler (cURL, pip, git gibi). .wgetrc ve -e yöntemleri yalnızca wget'i etkiler.
Parolamı kaydetmeden proxy kullanabilir miyim?
Evet. Proxy sağlayıcınızın panelinden sunucunuzun IP adresini yetkilendirirseniz kullanıcı adı ve parola gerekmez; adres yalnızca http://sunucu:port biçiminde yazılır. Sabit IP'li sunucular için en temiz yöntem budur.
wget ile her istekte farklı IP alabilir miyim?
wget'in kendisi rotasyon yapmaz. İki yol vardır: Rotating proxy kullanmak (tek adres, her bağlantıda farklı çıkış IP'si) ya da bir betikte her çağrıya -e https_proxy= ile farklı bir proxy vermek.
Proxy üzerinden FTP indirebilir miyim?
ftp_proxy değişkeni tanımlıysa wget FTP adreslerini HTTP proxy üzerinden çeker; proxy'nin bu kullanımı desteklemesi gerekir. Günümüzde FTP kaynakları azaldığı için çoğu proxy paketi HTTP ve HTTPS'e odaklanır.
Özetle
wget'i proxy ile kullanmanın üç yolu var: hızlı testler için ortam değişkenleri, betiklerde tek seferlik kullanım için -e seçeneği ve sürekli kullanım için .wgetrc dosyası. HTTPS adresler için https_proxy tanımlamayı, kimlik bilgilerini güvenli saklamayı, toplu indirmelerde hızı sınırlamayı ve SOCKS gerektiğinde cURL'e geçmeyi unutmayın.




