wget ile Proxy Kullanımı: Komutlar ve Örnekler

Yayın tarihi:

8 dk okuma

Acar Diveroli
Yazar: Acar Diveroli
Komut satırı penceresinde proxy üzerinden indirme

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:

bash
wget --version

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

bash
wget -qO- https://httpbin.org/ip

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

text
http://kullanici:parola@sunucu:port
  • http:// ş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:port bilgisi 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.

bash
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/ip

Dikkat edilecek üç nokta var:

  • https_proxy değeri de http:// 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 ~/.bashrc veya ~/.zshrc dosyasına ekleyin.
  • Küçük harf yazımı tercih edin. wget küçük harfli değişkenleri okur; bazı sistemlerde büyük harfli HTTP_PROXY de 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:

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

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

ini
use_proxy = on
http_proxy = http://pr.proxynet.io:8000
https_proxy = http://pr.proxynet.io:8000
proxy_user = kullanici
proxy_password = parola

Dosyada parola bulunduğu için yalnızca sizin okuyabileceğiniz şekilde izinleri kısıtlayın:

bash
chmod 600 ~/.wgetrc

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

bash
wget --no-proxy https://httpbin.org/ip -O -

Hangi yöntemi seçmeli?

DurumÖnerilen yöntem
Terminalde hızlı bir testOrtam 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 tutmakno_proxy
cron ile zamanlanmış indirme.wgetrc (cron ortam değişkenlerini taşımaz)
Docker konteyneri içindeOrtam 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:

bash
wget --timeout=30 --tries=3 --waitretry=5 \
     --user-agent="Mozilla/5.0 (X11; Linux x86_64)" \
     -O rapor.pdf https://example.com/rapor.pdf
  • --timeout her ağ işlemi için bekleme süresini sınırlar.
  • --tries başarısız indirmeyi kaç kez deneyeceğini belirler; --waitretry denemeler arasına bekleme koyar.
  • --user-agent tarayı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; -c eklerseniz 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:// ve socks5h:// ş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 proxychains gibi 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 export ile tanımladığınızdan emin olun; yalnızca http_proxy=... yazmak onu alt süreçlere aktarmaz.
  • HTTPS bir adrese gidiyorsanız http_proxy değil https_proxy değişkeninin tanımlı olması gerekir.
  • .wgetrc içinde use_proxy = off satırı olup olmadığını kontrol edin.
  • sudo wget çalıştırıyorsanız, sudo varsayılan olarak ortam değişkenlerinizi taşımayabilir; sudo -E ile taşıyın ya da ayarı /etc/wgetrc dosyasına yazın.
  • Hedef adres no_proxy listesindeki 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:

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

bash
wget -r -l 2 --wait=2 --random-wait --limit-rate=500k \
     --no-parent -A pdf https://example.com/belgeler/
  • -l 2 derinliği iki seviyeyle sınırlar; sınırsız derinlik tüm siteyi indirir.
  • --wait=2 istekler arasına iki saniye koyar, --random-wait bu süreyi rastgele değiştirir.
  • --limit-rate=500k indirme hızını sınırlar.
  • --no-parent üst dizinlere çıkmayı engeller, -A pdf yalnı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.

ChatGPT'ye sorClaude'a sor