Bir uygulamaya proxy ayarı yapmadan önce, sorunun uygulamada mı yoksa proxy bağlantısında mı olduğunu cURL ile ayırabilirsiniz. Komut satırı aracı en az değişkenle çalıştığı için hata ayıklamada ilk durak olarak uygundur. Örneklerde KULLANICI, SIFRE, proxy.example.com ve PORT yer tutucudur.
Temel kullanım: -x bayrağı
Proxy -x (--proxy) ile verilir. Kimlik bilgisi URL içinde yazılabilir ya da -U (--proxy-user) ile ayrı verilebilir. İkincisi komut geçmişinde şifrenin URL içinde görünmesini azaltır, ancak yine de şifre süreç listesinde görünebilir; paylaşımlı makinelerde ortam değişkeni kullanın.
# Kimlik bilgisi URL içinde
curl -x "http://KULLANICI:[email protected]:PORT" https://example.com/ -I
# Kimlik bilgisi ayrı
curl -x "http://proxy.example.com:PORT" -U "KULLANICI:SIFRE" https://example.com/ -ISOCKS5 ve socks5h
cURL, SOCKS5 için iki şema tanır. socks5:// host adını istemcide çözer; socks5h:// ise ad çözümünü proxy’ye bırakır. DNS sorgusunun yerel ağdan çıkmasını istemiyorsanız socks5h kullanın. Aynı davranış --socks5-hostname bayrağıyla da elde edilir.
# DNS çözümü proxy tarafında
curl -x "socks5h://KULLANICI:[email protected]:PORT" https://example.com/ -I
# Aynı etkiyi veren bayrak
curl --socks5-hostname proxy.example.com:PORT -U "KULLANICI:SIFRE" https://example.com/ -I| Şema veya bayrak | Protokol | Host adı çözümü |
|---|---|---|
| http:// | HTTP proxy | Proxy tarafında |
| socks5:// | SOCKS5 | İstemci tarafında |
| socks5h:// | SOCKS5 | Proxy tarafında |
Verbose çıktıyı okumak
-v bayrağı bağlantı kurulumunun adımlarını gösterir. HTTP proxy ile HTTPS hedefte CONNECT satırını ve proxy’nin yanıtını arayın: HTTP/1.1 200 Connection established tünelin açıldığını, 407 kimlik doğrulama sorununu, 403 ise proxy’nin hedefi veya portu kabul etmediğini gösterir.
curl -v -x "http://KULLANICI:[email protected]:PORT" https://example.com/ -o /dev/nullŞifrede @, :, / veya % gibi karakterler varsa URL biçiminde yüzde kodlaması gerekir; örneğin @ için %40. -U ile verirken bu kodlamaya gerek kalmaz, bu yüzden özel karakterli şifrelerde ikinci biçim daha az hataya açıktır. Test sırasında gateway’in yalnızca belirli portları ve protokolleri kabul ettiğini unutmayın: HTTP proxy portuna socks5h:// ile bağlanmak, ya da tersi, anlamsız bir hata ile sonuçlanır.
Süre ve durum ölçümü
-w ile çıktı biçimi tanımlanır. Aşağıdaki komut yalnızca HTTP durum kodunu ve toplam süreyi yazar. Bu süreler tek bir ölçümdür; bir ürünün hız veya gecikme özelliği olarak yorumlanmamalıdır.
curl -s -o /dev/null \
--connect-timeout 5 --max-time 20 \
-x "http://KULLANICI:[email protected]:PORT" \
-w "durum=%{http_code} baglanti=%{time_connect}s toplam=%{time_total}s\n" \
https://example.com/Ortam değişkenleri ve proxy dışı hedefler
cURL, http_proxy, https_proxy ve all_proxy ortam değişkenlerini okur; NO_PROXY ile belirli hostlar proxy dışında tutulur. Test sırasında eski bir ortam değişkeninin sonucu etkilemesini istemiyorsanız --noproxy "*" ile proxy’yi kapatarak doğrudan bağlantıyla karşılaştırma yapabilirsiniz. Böylece sorunun proxy’den mi yoksa hedeften mi geldiğini ayırırsınız.
# Doğrudan bağlantı (proxy kapalı)
curl --noproxy "*" -s -o /dev/null -w "durum=%{http_code}\n" https://example.com/
# Proxy ile aynı istek
curl -x "http://KULLANICI:[email protected]:PORT" -s -o /dev/null -w "durum=%{http_code}\n" https://example.com/IPv4 ve IPv6 ayrımı
İstemcinin hedefe IPv4 mü IPv6 mı kullanacağını -4 ve -6 bayraklarıyla zorlayabilirsiniz. Proxy kullanırken bu bayraklar istemci ile gateway arasındaki bağlantıyı etkiler; hedefe giden çıkış ailesi ürüne bağlıdır. IPv6 çıkışlı bir ürünü sınarken hedefin IPv6 desteklediğinden emin olun.
Yaygın hata nedenleri
- Connection refused
- Adres veya port yanlış ya da gateway o portu dinlemiyor.
- Operation timed out
- Gateway’e ulaşılamıyor; güvenlik duvarı veya yanlış adres olabilir.
--connect-timeoutile süreyi sınırlayın. - 407 Proxy Authentication Required
- Kullanıcı adı veya şifre eksik/yanlış. Özel karakterleri yüzde kodlayın.
- SOCKS5 reply: authentication failed
- SOCKS5 kimlik doğrulaması (RFC 1929) reddedildi.
- Proxy CONNECT aborted
- Gateway tüneli açmayı reddetti; hedef host veya port izinli olmayabilir.
Bağlantı kuruluyor ama çıkış IP beklediğiniz gibi değilse adresi IP sorgulama aracıyla doğrulayın. Katmanların nasıl ayrıştırılacağı gateway, routing ve çıkış IP yazısında anlatılıyor.
Özet
- Proxy
-xile verilir; kimlik bilgisi URL içinde ya da-Uile yazılır. - DNS çözümünün uzakta yapılması için
socks5h://veya--socks5-hostnamekullanın. -vçıktısında CONNECT yanıtı hatanın hangi katmanda olduğunu gösterir.--connect-timeoutve--max-timeile testlerin takılmasını önleyin.- Ölçülen süreler tek seferlik gözlemdir; performans taahhüdü olarak okunmamalıdır.