Geliştirici Rehberleri
Yayın tarihi
Okuma süresi
5 dk okuma

cURL ile Proxy Testi ve Sorun Giderme

cURL ile proxy nasıl test edilir: -x, kimlik doğrulama, socks5 ve socks5h, -v ile CONNECT gözlemi, zaman aşımı, IPv6 adresli proxy ve 407, 502, timeout ayrımı.

Bir proxy'nin çalışıp çalışmadığını anlamanın en hızlı yolu curl komutudur. Tek satırda proxy'ye bağlanır, kimlik doğrular ve hedefe gider; -v ile aradaki her adımı görürsünüz. Bu rehber curl'ü sınama aracı olarak kullanmayı, çıktıyı okumayı ve hataları ayırt etmeyi anlatır.

Örneklerde PROXY_HOST, PROXY_PORT, KULLANICI ve PAROLA yer tutucudur; IPv6 örnekleri 2001:db8::/32 belgelendirme aralığındandır. Komutlar Linux ve macOS kabuklarında olduğu gibi, Windows'ta curl.exe ile çalışır (ayrıntı aşağıda).

Temel kullanım

Bash
curl -x http://PROXY_HOST:PROXY_PORT \
     --proxy-user KULLANICI:PAROLA \
     https://api64.ipify.org

-x (--proxy) proxy adresini verir, --proxy-user (-U) kimlik bilgisini. api64.ipify.org, bağlandığınız adresi düz metin olarak yansıtan ve hem IPv4 hem IPv6 ile erişilebilen bir hizmettir. Proxy çalışıyorsa yazdığı adres sizin ev ya da ofis adresiniz değil, proxy'nin çıkış adresidir. Beklenen örnek çıktı:

Metin
2001:db8:abcd:12::5

Bu adres belgelendirme aralığından uydurma bir örnektir. IPv6 görüyorsanız trafik IPv6 çıkışından gidiyor demektir; IPv4 adresi görüyorsanız çıkış çift yığınlıdır ya da istek proxy'den geçmemiştir. Karşılaştırmak için -x olmadan aynı komutu çalıştırın. Tarayıcıdan sınamak isterseniz proxy kontrol aracı aynı işi görsel olarak yapar.

Parola ve kabuk uyarıları

Parola özel karakter içeriyorsa kabuk tırnaklaması önemlidir.

Bash
# Linux/macOS: tek tırnak kabuğun yorumlamasını engeller
curl -x http://PROXY_HOST:PROXY_PORT -U 'KULLANICI:p@ss!word' \
     https://api64.ipify.org

Windows komut isteminde (cmd) yalnızca çift tırnak çalışır; PowerShell'de tek tırnak kullanabilirsiniz. Parolayı adres içine (http://KULLANICI:PAROLA@...) yazarsanız @, :, /, # gibi karakterleri yüzde kodlamasıyla yazmanız gerekir; --proxy-user ile bu derdiniz olmaz.

Uyarı

Komut satırındaki parola kabuk geçmişine ve süreç listesine düşer. Paylaşılan makinelerde parolayı -K (--config) ile verdiğiniz bir yapılandırma dosyasına koyun ve dosya iznini kısıtlayın.

PowerShell'de curl.exe uyarısı

Windows PowerShell 5.1'de curl, Invoke-WebRequest komutunun takma adıdır. -x ya da -U verdiğinizde "parametre bulunamadı" benzeri bir hata alırsınız; çünkü bu cURL değildir. Gerçek cURL'ü .exe uzantısıyla çağırın:

PowerShell
curl.exe -x http://PROXY_HOST:PROXY_PORT -U KULLANICI:PAROLA https://api64.ipify.org

Hangi komutun çalıştığını Get-Command curl ile görebilirsiniz. Windows 10 ve sonrasında curl.exe işletim sistemiyle gelir. Yeni PowerShell sürümlerinde bu takma ad bulunmayabilir, yine de curl.exe yazmak her sürümde belirsizliği ortadan kaldırır.

Proxy türleri ve şemalar

ŞemaAnlamı
http://HTTP proxy; proxy'ye düz bağlanılır
https://HTTPS proxy; proxy'ye TLS ile bağlanılır
socks5://SOCKS5; alan adı istemcide çözülür
socks5h://SOCKS5; alan adı proxy'de çözülür

SOCKS5 örneği (--socks5-hostname kısa yoludur ve socks5h ile aynı davranışı verir):

Bash
curl -x socks5h://KULLANICI:PAROLA@PROXY_HOST:PROXY_PORT \
     https://api64.ipify.org

SOCKS5 RFC 1928 (yeni sekmede açılır) ile tanımlıdır; kullanıcı adı ve parola RFC 1929 (yeni sekmede açılır) ile gönderilir ve ağda düz metin gider. socks5h ile alan adını proxy çözer; çıkış ağında yalnızca proxy'nin görebildiği adresler ya da AAAA kaydı çözümü gerekiyorsa bu fark önemlidir. Sürekli bir SOCKS5 sınaması için SOCKS5 kontrol aracı da vardır.

Önemli

Her proxy ürünü SOCKS5 sunmaz. IPv6 Proxy paket özelliklerinde protokol HTTP(S) olarak geçer; SOCKS5 gerekiyorsa sipariş öncesi destekten teyit alın.

-v ile CONNECT'i gözlemleme

HTTPS hedefe giderken curl önce proxy'ye CONNECT isteği yollar (RFC 9110 §9.3.6 (yeni sekmede açılır)). -v bunu gösterir:

Bash
curl -v -x http://PROXY_HOST:PROXY_PORT -U KULLANICI:PAROLA \
     https://example.com -o /dev/null

Windows'ta -o /dev/null yerine -o NUL yazın. Örnek çıktının önemli satırları (kısaltılmıştır):

Metin
* Connected to PROXY_HOST (192.0.2.10) port PROXY_PORT
* CONNECT tunnel: HTTP/1.1 negotiated
> CONNECT example.com:443 HTTP/1.1
> Host: example.com:443
> Proxy-Authorization: Basic [kısaltıldı]
< HTTP/1.1 200 Connection established
* CONNECT phase completed
* TLS handshake ...
> GET / HTTP/2
< HTTP/2 200

Okuma sırası şöyledir: önce proxy'ye TCP bağlantısı, sonra CONNECT isteği, sonra proxy'nin yanıtı. 200 yanıtından sonra tünel açılmıştır ve TLS tünelin içinde kurulur. CONNECT satırı bile görünmüyorsa sorun proxy'ye bağlanma aşamasındadır. 407 ya da 502 görüyorsanız aşağıdaki tabloya bakın.

HTTP hedefte (http://) curl CONNECT kullanmaz, isteği doğrudan proxy'ye iletir. Tüneli zorlamak için -p (--proxytunnel) ekleyin.

Yanıt başlıklarını görmek için -I kullanın:

Bash
curl -I -x http://PROXY_HOST:PROXY_PORT -U KULLANICI:PAROLA https://example.com

Zaman aşımları

Takılan bir test sonsuza dek bekleyebilir. İki sınır koyun:

Bash
curl --connect-timeout 5 --max-time 20 \
     -x http://PROXY_HOST:PROXY_PORT -U KULLANICI:PAROLA \
     https://api64.ipify.org

--connect-timeout bağlantı kurma süresini, --max-time işlemin toplam süresini sınırlar. Zaman aşımı olduğunda curl 28 koduyla çıkar. Kısa bir --connect-timeout erişilemeyen proxy hatasını hemen görünür kılar.

IPv6 adresli proxy

Proxy'nin kendisi IPv6 adresindeyse adres URL içinde köşeli parantezle yazılır (RFC 3986 §3.2.2 (yeni sekmede açılır)):

Bash
curl -x "http://[2001:db8::1]:8080" -U KULLANICI:PAROLA \
     https://api64.ipify.org

Köşeli parantez olmadan 2001:db8::1:8080 yazarsanız adres ile port ayrılamaz. Hedef adres IPv6 literal ise (http://[2001:db8::2]/) curl köşeli parantezi "sıralama aralığı" sanıp yorumlamaya çalışabilir; bunu -g (--globoff) ile kapatın:

Bash
curl -g -x "http://PROXY_HOST:PROXY_PORT" "http://[2001:db8::2]/"

-g yalnızca hedef URL için gerekir. Belirli bir IP sürümünü zorlamak isterseniz -6 ya da -4 ekleyin; ancak bunlar curl ile proxy arasındaki bağlantıyı etkiler, proxy'nin hedefe çıkış sürümünü değiştirmez. Adres yazımı konusunda IPv6 adres türleri yazısı faydalı olabilir.

407, 502 ve zaman aşımı nasıl ayırt edilir

BelirtiAnlamıNe yapılmalı
407 Proxy Authentication RequiredKimlik bilgisi eksik ya da yanlışKullanıcı adı ve parolayı, kabuk tırnaklamasını kontrol edin
502 Bad GatewayProxy'ye ulaşıldı ama proxy hedefe bağlanamadıHedefi proxy dışında deneyin; hedef yalnızca IPv4 olabilir
curl: (7) bağlantı reddedildiAdres/port yanlış ya da servis kapalıHost ve portu panel bilgisiyle karşılaştırın
curl: (28) zaman aşımıAğ yolu kapalı ya da yanıt gelmiyor-v ile hangi adımda takıldığına bakın
curl: (5) proxy çözülemediProxy alan adı DNS'te yokAdı ya da DNS'i kontrol edin
curl: (35) TLS hatasıŞema uyuşmazlığı (HTTPS proxy'ye http://)Şemayı ve portu doğrulayın

407 ve 502 durumunda curl çoğunlukla "CONNECT tunnel failed, response 407" benzeri bir iletiyle çıkar. Hata kodları sürüme göre küçük farklar gösterebilir; ileti metni kodu tek başına okumaktan güvenilirdir.

Uyarı

Hedefin yalnızca IPv4 adresi varsa (AAAA kaydı yoksa) yalnızca IPv6 çıkışlı bir proxy ona doğrudan ulaşamaz ve sonuç genellikle 502 ya da bağlantı hatası olur. Çıkış ağında NAT64/DNS64 çevirisi gerekir. IPv6 Proxy için bu katmanın kapsamı doğrulanmamıştır; hedefinizde önceden test edin.

HTTPS proxy, HTTP/2 ve riskler

-x https://... proxy ile aranızdaki bağlantıyı da TLS'e sarar. Bu, kimlik bilgisinin ağda görünmemesi açısından avantajdır; ancak her proxy HTTPS proxy bağlantısı sunmaz. Ürünün sunduğu bağlantı türünü panelden doğrulayın, varsaymayın.

  • --proxy-cacert proxy sertifikasını kendi CA dosyanızla doğrulamanızı sağlar.
  • --proxy-insecure proxy sertifikasının doğrulamasını kapatır; ortadaki biri proxy'yi taklit edebilir. Yalnızca kendi test ortamınızda kullanın.
  • --insecure (-k) ise hedef sitenin sertifikasını kapatır; bir proxy testini başarılı göstermek için bunu kullanmayın, gerçek bir TLS sorununu gizler.
  • HTTP/2, hedefle tünel içinde pazarlanır. Sorunun HTTP/2'den gelip gelmediğini anlamak için --http1.1 ekleyip farkı karşılaştırın.

Sonuçları programdan almak için Python ile proxy kullanımı ve Node.js ile proxy kullanımı yazılarına, paket ayrıntıları için IPv6 Proxy ürün sayfasına bakabilirsiniz.

Hızlı kontrol listesi

  • Önce curl -x ... https://api64.ipify.org ile çıkış adresine bakın.
  • Sorun varsa -v ekleyin ve CONNECT satırının yanıtını okuyun.
  • Her komuta --connect-timeout ve --max-time koyun.
  • Windows PowerShell'de curl.exe yazın.
  • IPv6 proxy adresini köşeli parantezle, IPv6 hedef URL'sini -g ile kullanın.

Sık sorulan sorular

curl ile proxy nasıl belirtilir?

Proxy, -x (--proxy) seçeneğiyle belirtilir: curl -x http://PROXY_HOST:PROXY_PORT https://api64.ipify.org. Kimlik doğrulama gerekiyorsa --proxy-user KULLANICI:PAROLA ekleyin.

socks5 ile socks5h arasındaki fark nedir?

Şema olarak socks5h:// yazılırsa alan adı çözümü proxy tarafında yapılır, socks5:// yazılırsa curl bunu kendi makinesinde yapar. Çıkış adresi başka bir ağdaysa genellikle socks5h istenir.

Windows PowerShell'de curl komutu neden başka sonuç veriyor?

Windows PowerShell 5.1'de curl, Invoke-WebRequest komutunun takma adıdır ve seçenekleri farklıdır. Gerçek cURL için curl.exe yazın.

407 ile 502 hatası ne anlama gelir?

Durum kodu 407, proxy'nin kimlik doğrulaması istediğini ya da gönderdiğiniz bilgiyi reddettiğini gösterir. 502 ise proxy'nin kendisine ulaştığınızı ama proxy'nin hedefe bağlanamadığını gösterir.

--proxy-insecure ne yapar ve güvenli mi?

HTTPS proxy kullanırken proxy'nin sertifikasını doğrulamayı kapatır. Ortadaki biri proxy'yi taklit edebileceğinden yalnızca kendi kontrolünüzdeki test ortamlarında kullanılmalıdır.

/128Ürün

IPv6 Proxy ürününü inceleyin

Adet bazlı fiyatlanan IPv6 proxy paketleri. Satışı Sağlam Proxy (saglamproxy.com) üzerinden yapılır.