Hata Giderme

Proxy timeout nedir? Zaman aşımı türleri ve doğru ayar

Zaman aşımı tek bir şey değildir: bağlantı kurma, el sıkışma ve yanıt bekleme ayrı sürelerdir. Hangisine takıldığınızı bilmek hem hatayı hem doğru ayarı gösterir.

Kategori
Hata Giderme
Okuma süresi
7 dk okuma
Yayın:

Proxy timeout, bir isteğin belirli bir süre içinde tamamlanamaması nedeniyle istemcinin beklemeyi bırakmasıdır. Sürenin dolduğu yere göre anlamı çok değişir: proxy'ye hiç ulaşılamamış olabilir, proxy yanıt vermiyor olabilir ya da proxy hedefi beklerken siz sabrınızı yitirmiş olabilirsiniz. Üç durumda da mesaj benzerdir: "timed out".

Dört ayrı zaman aşımı

Zaman aşımı türleri ve ne anlama geldikleri
TürNeyi bekler?Dolarsa ne düşünülmeli?
Bağlantı (connect)Proxy'ye TCP bağlantısının kurulmasıProxy kapalı, IP/port yanlış, paketler düşüyor
El sıkışma (handshake)Protokol ve kimlik doğrulama aşaması, TLS dahilYanlış protokol, yavaş kimlik doğrulama, TLS sorunu
Okuma (read)Veri akışında iki parça arasındaki beklemeHedef yavaş, proxy kuyruğu doluyor, ağ kesintisi
Toplam (total)Tüm isteğin başından sonuna kadar süreBüyük yanıt, yavaş hat ya da yukarıdakilerden biri

Örnek oranlar

Konsept animasyonu
Gecikme bileşenleriKonsept animasyonu: istemciden proxy’ye ve hedefe giden paketler; süre çubuğu bağlantı, el sıkışma ve ilk bayt için örnek oranları gösterir. Ölçüm içermez.
  • Bağlantı
  • El sıkışma
  • İlk bayt
Bir isteğin süresi aşamalardan oluşur: proxy'ye bağlantı, el sıkışma, ilk bayt, aktarım. Zaman aşımı bu aşamalardan hangisinde dolduysa sorun oradadır.Konsept animasyonu

cURL'de süreleri ayarlama

cURL'de --connect-timeout yalnızca bağlantı aşamasını (proxy kullanırken proxy'ye bağlanmayı), -m (--max-time) ise tüm işlemi sınırlar. İkisini birlikte kullanmak, takılan bağlantıları hızlı ayıklamanın en basit yoludur.

Bash
curl -sS --connect-timeout 5 -m 20 -x http://proxy.example.com:8080 --proxy-user KULLANICI:PAROLA -w 'kod=%{http_code} baglanti=%{time_connect} ilk_bayt=%{time_starttransfer} toplam=%{time_total}\n' -o /dev/null https://example.com/
Bağlantı için 5 sn, toplam için 20 sn sınır

Süre dolarsa cURL curl: (28) ile çıkar; mesajda "Connection timed out" yazıyorsa bağlantı aşamasında, "Operation timed out" yazıyorsa toplam sürede takıldığınız anlaşılır. Komut tamamlanabiliyorsa -w çıktısında time_connect küçük, time_total büyükse bekleme proxy'ye bağlandıktan sonraki aşamalardadır.

Python'da süreleri ayırmak

requests içinde timeout=(bağlantı, okuma) biçimindeki ikili değer iki süreyi ayrı belirler. Tek bir sayı vermek ikisine de aynı değeri uygular. Önemli bir uyarı: requests toplam süreyi sınırlamaz; yanıt bayt bayt gelmeye devam ediyorsa okuma süresi hiç dolmayabilir. Toplam süre garantisi gerekiyorsa ayrı bir mekanizma (örneğin iş parçacığı zaman aşımı ya da httpx kütüphanesinin Timeout nesnesi) kullanın.

Python
import requests

PROXY = "http://KULLANICI:[email protected]:8080"
proxies = {"http": PROXY, "https": PROXY}

try:
    r = requests.get("https://example.com/", proxies=proxies, timeout=(5, 20))
    print(r.status_code)
except requests.exceptions.ConnectTimeout:
    print("proxy'ye 5 sn icinde baglanilamadi")
except requests.exceptions.ReadTimeout:
    print("baglanti kuruldu ama 20 sn icinde veri gelmedi")
5 saniye bağlantı, 20 saniye okuma sınırı

Doğru süre kaç saniyedir?

Herkes için geçerli tek bir değer yoktur; ama karar vermenize yardım eden bir mantık vardır. Bağlantı süresini kısa tutun, çünkü kurulamayan bir bağlantı beklemekle düzelmez. Okuma süresini hedefe göre belirleyin, çünkü yavaş bir hedef için kısa süre sahte hata üretir.

  • Bağlantı: birkaç saniye. Sağlıklı bir proxy'ye bağlantı genellikle bu süreden çok kısa sürer; uzayan bağlantı çoğu zaman sorunun işaretidir.
  • Okuma/toplam: hedefinize göre on-otuz saniye aralığı makul bir başlangıçtır. Büyük dosya indiriyorsanız toplam süreyi değil, okuma süresini esas alın.
  • Rotasyonlu proxy: her istekte IP değişiyorsa ilk bağlantı biraz daha uzun sürebilir; süreyi sabit tutup başarısız olanı yeniden deneyin.
  • Mobil ve uzak hatlar: ağ dalgalanması daha fazla olabilir; toplam süreyi biraz geniş tutun.

Yeniden deneme stratejisi

Geçici zaman aşımları için kısa bir bekleme ile birkaç yeniden deneme yeterlidir. Her denemede bekleme süresini artırın (örneğin 1, 2, 4 saniye); aksi halde sorunu yaşayan bir proxy'ye daha da yük bindirirsiniz. Üç denemeden sonra da başarısızlık sürüyorsa proxy'yi "sağlıksız" işaretleyip başkasına geçin.

Python
import time
import requests

PROXY = "http://KULLANICI:[email protected]:8080"
proxies = {"http": PROXY, "https": PROXY}

def al(url, deneme=3):
    bekleme = 1
    for n in range(deneme):
        try:
            return requests.get(url, proxies=proxies, timeout=(5, 20))
        except (requests.exceptions.ConnectTimeout, requests.exceptions.ReadTimeout):
            if n == deneme - 1:
                raise
            time.sleep(bekleme)
            bekleme *= 2

print(al("https://example.com/").status_code)
Üstel bekleme ile en çok üç deneme

Zaman aşımının sık nedenleri

  1. 1Port ya da IP yanlış; paketler hiçbir yere gitmiyor.
  2. 2Yerel veya kurumsal güvenlik duvarı giden bağlantıyı sessizce düşürüyor.
  3. 3Proxy çevrimdışı veya aşırı yüklü.
  4. 4Yanlış protokol: istemci beklerken proxy çıktı vermiyor.
  5. 5Hedef site yavaş ya da proxy'nin IP'sine yanıtı geciktiriyor.
  6. 6DNS çözümlemesi uzuyor; özellikle istemci tarafında ad çözdüren socks5:// kullanımında.

Denetleyici zaman aşımlarını nasıl gösterir?

Proxy denetleyicisi bağlantı ve el sıkışma aşamalarını ayrı zaman sınırlarıyla dener; hangi aşamada süre dolarsa sonuç bu aşamayla etiketlenir. Zaman aşımı ile "bağlantı reddedildi" farklı durumlar olarak raporlanır. Denetleyicinin süreleri sabittir; kendi uygulamanızın sürelerini kendi ihtiyacınıza göre ayarlamanız gerekir.

Proxy'nizin hangi aşamada zaman aşımına uğradığını görün.

Proxy Kontrol Et

Bu yazıda kullanılan araçlar

Sık sorulan sorular

İlgili rehberler