HTTP proxy test etmek, tek bir sayfanın açılıp açılmadığına bakmaktan fazlasıdır. Bir HTTP proxy iki farklı yolla çalışır: düz HTTP isteğini kendisi okuyup hedefe iletir, HTTPS için ise CONNECT ile bir bayt tüneli açar. Birini destekleyip ötekini kısıtlayan proxy'ler yaygındır; sonuç olarak "bazı sitelerde çalışıyor, bazılarında çalışmıyor" şikâyeti doğar.
HTTP proxy iki farklı şekilde çalışır
| Düz HTTP hedef | HTTPS hedef | |
|---|---|---|
| İstemcinin gönderdiği | GET http://example.com/ HTTP/1.1 (tam adres) | CONNECT example.com:443 HTTP/1.1 |
| Proxy ne yapar? | İsteği okur, hedefe kendisi iletir | Başarı yanıtından sonra baytları körü körüne aktarır |
| İçeriği görebilir mi? | Evet, trafik okunabilir ve değiştirilebilir | Hayır, TLS istemci ile hedef arasında kurulur |
| Başarı işareti | Hedefin kendi durum kodu | Proxy'den 2xx yanıtı, ardından hedefin yanıtı |
| Sık reddedilme nedeni | Kimlik doğrulama (407) | CONNECT yasağı veya yalnızca 443 izni |
Hedef düz HTTP: istemci isteği proxy’ye tam URL ile (absolute-form) gönderir, proxy hedefe bağlanıp iletir.
- 1. İstemci → Proxy: İstek proxy’ye tam URL ile gider
- 2. Proxy → İstemci: Proxy kimlik doğrulaması isteyebilir (isteğe bağlı)
- 3. İstemci → Proxy: İstek kimlik bilgisiyle yinelenir (isteğe bağlı)
- 4. Proxy → Hedef: Proxy hedefe bağlanır ve isteği iletir
- 5. Hedef → Proxy: Hedef yanıt verir
- 6. Proxy → İstemci: Proxy yanıtı istemciye iletir
Düz bağlantı
İstek proxy’ye tam URL ile gider
- İstek satırı
- GET http://example.com/yol HTTP/1.1
- Host
- example.com
- Biçim
- absolute-form (tam URL)
Proxy hedefi bu URL’den okur; istemci hedefe doğrudan bağlanmaz.
Proxy düz HTTP trafiğini okuyabilir ve değiştirebilir.
1. test: düz HTTP isteği
-x ile proxy'yi, -v ile ayrıntıyı açın. Çıktıda GET http://example.com/ biçiminde tam adresli bir istek satırı görmelisiniz; bu, cURL'ün isteği proxy'ye "şu adrese git" diyerek verdiğini gösterir.
curl -v -m 20 -x http://proxy.example.com:8080 --proxy-user KULLANICI:PAROLA http://example.com/ -o /dev/nullBaşarılıysa hedefin durum kodunu (ör. HTTP/1.1 200 OK) görürsünüz. Proxy araya Via ya da X-Forwarded-For gibi başlıklar ekliyorsa bunlar hedefe giden istekte görünür; anonimlik bu başlıklara bakılarak sınıflandırılır. Ayrıntı için anonimlik seviyeleri sayfasına bakın.
2. test: CONNECT tüneli (HTTPS)
cURL, HTTPS adresi ve HTTP proxy görünce kendiliğinden CONNECT kullanır. Tüneli zorla denemek istediğinizde, örneğin düz HTTP adresinde bile tünel açtırmak için, -p (--proxytunnel) bayrağını ekleyin.
curl -v -m 20 -x http://proxy.example.com:8080 --proxy-user KULLANICI:PAROLA https://example.com/ -o /dev/null
curl -v -m 20 -p -x http://proxy.example.com:8080 --proxy-user KULLANICI:PAROLA http://example.com/ -o /dev/nullÇıktıda şu satırları arayın: > CONNECT example.com:443 HTTP/1.1 istek, < HTTP/1.1 200 Connection established yanıt. 200 gelmişse tünel kurulmuştur; sonrasındaki TLS hatalarının suçlusu proxy değildir.
3. test: 407 ve kimlik doğrulama
Kimlik bilgisi olmadan istek attığınızda doğru çalışan bir kimlik doğrulamalı proxy 407 Proxy Authentication Required ile birlikte Proxy-Authenticate başlığını döner. Bu, proxy'nin çalıştığının kanıtıdır. Sorun, doğru bilgiyle de 407 almanızdır.
curl -sS -i -m 15 -x http://proxy.example.com:8080 http://example.com/ -o /dev/null -w 'kod=%{http_code}\n'
curl -sS -m 15 -x http://proxy.example.com:8080 --proxy-user KULLANICI:PAROLA http://example.com/ -o /dev/null -w 'kod=%{http_code}\n'Temel kimlik doğrulama (Basic) kullanıcı adı ve parolayı kullanici:parola biçiminde Base64'e çevirip Proxy-Authorization: Basic ... başlığıyla gönderir. Base64 şifreleme değildir; proxy'ye düz HTTP ile bağlandığınızda bu başlık yol üzerinde okunabilir. Bu nedenle kimlik bilgisi taşıyan proxy bağlantısını güvenilmeyen ağlarda kullanmaktan kaçının.
Durum koduna göre yorum
| Kod | Anlamı | Ne yapmalı |
|---|---|---|
| 200 | Başarılı (CONNECT için: tünel açıldı) | Sorun yok |
| 407 | Proxy kimlik bilgisi istiyor ya da reddetti | Kullanıcı adı, parola, IP izin listesi |
| 403 | Proxy isteği yasakladı | Hedef port/alan adı kısıtı, hesap kısıtı |
| 502 | Proxy hedefe ulaşamadı veya geçersiz yanıt aldı | Başka hedefle deneyin |
| 504 | Proxy hedeften zamanında yanıt alamadı | Hedefi ve zaman aşımını inceleyin |
Python ile tüm testleri tek betikte toplayın
import requests
PROXY = "http://KULLANICI:[email protected]:8080"
proxies = {"http": PROXY, "https": PROXY}
def dene(ad, url):
try:
r = requests.get(url, proxies=proxies, timeout=(10, 20))
print(ad, "->", r.status_code)
except requests.exceptions.ProxyError as e:
print(ad, "-> proxy hatasi:", e)
except requests.exceptions.Timeout:
print(ad, "-> zaman asimi")
except requests.exceptions.RequestException as e:
print(ad, "-> hata:", e)
dene("duz http", "http://example.com/")
dene("https (CONNECT)", "https://example.com/")Çıktıda iki satırdan yalnızca biri başarısızsa yukarıdaki tabloya göre ayrıştırın: yalnız HTTPS başarısızsa CONNECT kısıtı, yalnız HTTP başarısızsa nadir de olsa düz iletmenin kapalı olması söz konusudur.
Denetleyici ile HTTP proxy sınaması
HTTP proxy denetleyicisi iki yolu ayrı çalıştırır: düz HTTP iletimi ve HTTPS için CONNECT tüneli. Her biri için proxy'ye bağlantı süresini ve sınama adresinden ilk baytın geliş süresini raporlar. Kimlik bilgisi gerekiyorsa girersiniz; yoksa 407 sonucu kendiliğinden görünür.
HTTP proxy'nizi düz istek ve CONNECT için ayrı ayrı sınayın.
Proxy Kontrol Et