Bir proxy hizmeti seçerken karşınıza çoğunlukla iki protokol çıkar: HTTP(S) ve SOCKS5. İkisi de uygulamanızın trafiğini bir ara sunucu üzerinden geçirir, ancak ne kadarını anladıkları ve neyi taşıyabildikleri bakımından farklıdırlar. Bu fark; kullandığınız yazılımın uyumluluğunu, ad çözümünün nerede yapıldığını ve hata ayıklama biçimini doğrudan etkiler.
HTTP proxy nasıl çalışır
HTTP proxy, HTTP protokolünü konuşan bir aracıdır. Düz HTTP hedefler için istemci isteği proxy'ye tam adresle gönderir (GET http://example.com/ HTTP/1.1). Proxy isteği okur, hedefe iletir ve cevabı geri döner. Proxy bu sırada istek başlıklarını görebilir ve değiştirebilir.
HTTPS hedeflerde durum farklıdır. İstemci önce proxy'ye CONNECT example.com:443 HTTP/1.1 isteği gönderir. Proxy hedefe bir TCP bağlantısı açar ve 200 cevabı verir; sonrasında proxy bu bağlantıyı bir tünel olarak ele alır ve TLS el sıkışması istemci ile hedef arasında doğrudan gerçekleşir. Proxy tünelin içindeki HTTPS içeriğini okuyamaz.
CONNECT example.com:443 HTTP/1.1
Host: example.com:443
Proxy-Authorization: Basic <kimlik-bilgisi>
HTTP/1.1 200 Connection establishedHTTP proxy kimlik doğrulaması Proxy-Authorization başlığıyla yapılır. Kimlik bilgisi eksik ya da hatalıysa proxy 407 Proxy Authentication Required döner. Bu yüzden HTTP proxy sorunlarında ilk bakılacak yer çoğu zaman durum kodudur.
SOCKS5 proxy nasıl çalışır
SOCKS5 bir uygulama protokolünü yorumlamaz. İstemci hedef adresi ve portu bildirir, proxy bağlantıyı açar, sonrasında iki yön arasında baytlar aktarılır. HTTP, HTTPS, SMTP, FTP, SSH ve özel TCP protokolleri aynı yolla taşınabilir. Protokolün adımları SOCKS5 proxy nasıl çalışır yazısında ayrıntılıdır.
Yan yana karşılaştırma
| Özellik | HTTP proxy | SOCKS5 proxy |
|---|---|---|
| Çalışma düzeyi | HTTP'yi anlar | Uygulama protokolünden bağımsız |
| Taşıyabildiği trafik | HTTP, CONNECT ile HTTPS ve diğer TCP tünelleri | Her TCP trafiği; UDP, hizmet destekliyorsa |
| Kimlik doğrulama | Proxy-Authorization başlığı, 407 cevabı | RFC 1929 kullanıcı adı/şifre veya yöntem müzakeresi |
| Başlık görünürlüğü | Düz HTTP'de başlıkları görür | İçeriği yorumlamaz |
| Alan adı çözümü | İstekteki ad proxy tarafından çözülür | Şemaya bağlı: socks5 yerel, socks5h proxy tarafı |
| Tipik istemci uyumu | Tarayıcılar, HTTP kütüphaneleri, scraping araçları | HTTP dışı protokoller konuşan uygulamalar, genel amaçlı araçlar |
Hangisini seçmeli
HTTP proxy tercih edilen durumlar
- Trafik yalnızca web ise (tarayıcı, HTTP istemcisi, API çağrıları).
- Kullandığınız araç yalnızca HTTP proxy ayarı sunuyorsa.
- Hata ayıklamada HTTP durum kodlarından (
407,502,503) yararlanmak istiyorsanız.
SOCKS5 tercih edilen durumlar
- HTTP dışında bir TCP protokolü proxy'den geçecekse.
- Uygulama SOCKS ayarını yerel olarak destekliyor ve HTTP proxy desteği yoksa.
- Alan adı çözümünün proxy tarafında yapılmasını açıkça istiyorsanız (
socks5h).
Kodda fark nasıl görünür
Aşağıdaki iki cURL çağrısı aynı hedefe farklı protokolle gider. Yer tutucuları kendi bilgilerinizle değiştirin.
# HTTP proxy (HTTPS hedef için CONNECT tüneli açılır)
curl --proxy http://KULLANICI:SIFRE@proxy.example.com:PORT https://api.ipify.org
# SOCKS5 proxy (alan adı proxy tarafında çözülür)
curl --proxy socks5h://KULLANICI:SIFRE@proxy.example.com:PORT https://api.ipify.orgPython'da requests her ikisini de proxies sözlüğüyle kabul eder; SOCKS için requests[socks] eklentisi gerekir.
import requests
http_proxy = "http://KULLANICI:[email protected]:PORT"
socks_proxy = "socks5h://KULLANICI:[email protected]:PORT"
for p in (http_proxy, socks_proxy):
r = requests.get(
"https://api.ipify.org",
proxies={"http": p, "https": p},
timeout=15,
)
print(p.split(":")[0], r.text)Özet
- HTTP proxy HTTP'yi anlar; HTTPS için CONNECT ile tünel açar ve tünel içeriğini okuyamaz.
- SOCKS5 uygulama protokolünden bağımsızdır ve her TCP trafiğini taşıyabilir.
- Kimlik doğrulama HTTP'de
Proxy-Authorizationile, SOCKS5'te RFC 1929 ile yapılır. - Seçim; trafiğin türüne, kullandığınız yazılımın desteğine ve ürünün sunduğu protokollere göre yapılır.