Proxy bağlantı hataları farklı araçlarda farklı mesajlarla görünür ama arkasındaki neden sınırlıdır. Aynı sorun cURL'de curl: (7), Node.js'te ECONNREFUSED, Python'da ProxyError, tarayıcıda ERR_PROXY_CONNECTION_FAILED olarak karşınıza çıkabilir. Bu rehber mesajı önce nedene, sonra çözüme çevirir.
Önce hatanın hangi aşamada oluştuğunu belirleyin
Bir proxy isteği sırayla şu aşamalardan geçer: proxy adının çözülmesi, proxy'ye TCP bağlantısı, protokol el sıkışması, kimlik doğrulama, hedefe bağlantı, yanıt. Hata mesajının bu sıradaki yeri çözüm yolunu belirler. Yukarıdaki aşamalardan biri bozuksa sonrakilerin denenmesinin anlamı yoktur.
Ağ düzeyi hatalar (proxy'ye ulaşılamıyor)
| Mesaj / kod | Anlamı | Olası neden | Çözüm |
|---|---|---|---|
| ECONNREFUSED, curl (7) | Bağlantı reddedildi | Portta dinleyen yok, port yanlış, hizmet kapalı | Portu ve IP'yi sağlayıcıdan doğrulayın |
| ETIMEDOUT, curl (28) | Zaman aşımı | Paketler düşüyor, güvenlik duvarı, proxy çevrimdışı | Başka ağdan deneyin; zaman aşımı rehberine bakın |
| ENOTFOUND, curl (5) | Proxy adı çözülemedi | Alan adında yazım hatası veya DNS sorunu | DNS Sorgulama ile adı çözümleyin |
| EHOSTUNREACH / ENETUNREACH | Hedefe yol yok | Yerel yönlendirme, IPv6/IPv4 uyuşmazlığı | Ağ bağlantınızı ve IP sürümünü kontrol edin |
| ECONNRESET | Karşı taraf bağlantıyı kesti | Yanlış protokol, proxy kapanıyor, hız sınırı | Protokolü değiştirin; bir süre sonra yeniden deneyin |
HTTP proxy yanıt kodları
| Kod | Anlamı | Nedeni ve çözümü |
|---|---|---|
| 407 | Proxy kimlik doğrulaması gerekli | Bilgiler eksik/yanlış ya da IP izin listesinde değilsiniz; kullanıcı adı, parola ve çıkış IP'nizi kontrol edin |
| 403 | Yasak | Hesap, port veya hedef için kısıt; CONNECT yalnızca 443 olabilir |
| 400 | Geçersiz istek | Yanlış biçimlendirilmiş istek satırı veya karşıdaki aslında proxy değil |
| 502 | Hatalı ağ geçidi | Proxy hedeften geçersiz yanıt aldı ya da hedefe bağlanamadı; başka hedef deneyin |
| 503 | Hizmet kullanılamıyor | Proxy aşırı yüklü ya da geçici olarak kapalı; sonra tekrar deneyin |
| 504 | Ağ geçidi zaman aşımı | Proxy hedeften zamanında yanıt alamadı; hedefi ve süreleri inceleyin |
Not: cURL, HTTPS için CONNECT isteği reddedildiğinde curl: (56) CONNECT tunnel failed, response 407 gibi bir mesaj verir. Buradaki sayı proxy'nin döndürdüğü koddur; yukarıdaki tabloyla eşleştirebilirsiniz.
SOCKS5 hataları
SOCKS5 kendi yanıt kodlarını taşır. Kod 2 kural kümesinin isteği yasakladığını, 3 ve 4 ağ ya da sunucunun erişilemez olduğunu, 5 hedef portun bağlantıyı reddettiğini, 7 komutun (ör. UDP) desteklenmediğini, 8 adres türünün desteklenmediğini gösterir. Ayrıntılı tablo ve kimlik doğrulama aşaması SOCKS5 kontrol rehberinde anlatılıyor.
TLS ve sertifika hataları
curl: (35)veSSL_ERROR_SYSCALL: TLS el sıkışması yarıda kesildi. HTTPS proxy kullanıyorsanız proxy'nin TLS yapılandırmasını, değilseniz protokolün doğru olup olmadığını kontrol edin.certificate has expired: proxy sertifikası süresi dolmuş. Sağlayıcıya bildirin.hostname mismatch: sertifika, bağlandığınız ada ait değil. IP ile bağlanıyorsanız ve sertifika alan adı içinse, alan adıyla bağlanın.self-signed certificate: sertifika herkese açık bir otorite tarafından imzalanmamış. Güvenmediğiniz bir sertifikayı yok saymak yerine kaynağı doğrulayın.
Tanı sırası: 5 dakikada kök nedeni bulma
- 1
Aynı ayarı cURL ile deneyin
Uygulamanızın dışında, yalın bir komutla çalıştırın. Çalışıyorsa sorun uygulamadadır; çalışmıyorsa proxy ya da ağdadır.
- 2
Çıkış kodunu ve mesajı yazın
Yukarıdaki tablolarda eşleşen satırı bulun.
- 3
Başka bir ağdan deneyin
Denetleyici veya mobil veri gibi bağımsız bir yoldan aynı proxy'yi sınayın; sorunun yerel olup olmadığını ayırırsınız.
- 4
Farklı bir hedef deneyin
Yalnızca bir sitede hata varsa sorun hedefte olabilir.
- 5
Kimlik bilgisini yenileyin
Sağlayıcı panelinden yeniden kopyalayın, sondaki boşluklara dikkat edin.
curl -v -m 20 -x http://proxy.example.com:8080 --proxy-user KULLANICI:PAROLA https://example.com/ -o /dev/nullimport requests
PROXY = "http://KULLANICI:[email protected]:8080"
try:
r = requests.get("https://example.com/", proxies={"https": PROXY}, timeout=(10, 20))
print(r.status_code)
except requests.exceptions.ConnectTimeout:
print("proxy'ye ulasilamadi (zaman asimi)")
except requests.exceptions.ProxyError as e:
print("proxy hatasi (reddedildi, 407, CONNECT kisiti...):", e)
except requests.exceptions.SSLError as e:
print("TLS/sertifika hatasi:", e)
except requests.exceptions.ReadTimeout:
print("yanit gelmedi")Denetleyici hata sınıflandırmasında nasıl yardım eder?
Proxy denetleyicisi hata durumunda sonucu aşamayla birlikte verir: bağlantı reddi, zaman aşımı, protokol uyuşmazlığı, kimlik doğrulama hatası ya da sınama adresine ulaşılamama gibi. Bu sınıflandırma yukarıdaki tablolara denk gelir. Denetleyicinin göremediği iki şey vardır: bir proxy'nin hedef sitenizde neden engellendiği ve yerel ağınızdaki bir güvenlik duvarının etkisi.
Hata mesajının hangi aşamaya ait olduğunu denetleyicide görün.
Proxy Kontrol Et