Socks5Proxy

cURL proxy kullanımı, komut satırında HTTP ve SOCKS5 proxy testi

Bu rehber, cURL ile Socks5Proxy'nin HTTP ve SOCKS5 proxy'lerine bağlanma yöntemini, kullanıcı adı ve şifre doğrulamasını, yanıt süresi ölçümünü ve tüm listeyi tek seferde kontrol eden shell script'ini açıklar.

cURL ile proxy test etmek neden iyidir?

cURL neredeyse tüm sunucu ve geliştirme ortamlarında kurulu olduğundan proxy'nin düzgün çalışıp çalışmadığını en hızlı şekilde kontrol edebileceğiniz araçtır. Kod veya tarayıcı ayarlarında sorun çıktığında aynı satırı cURL ile test ederek proxy mi yoksa kod mu sorunlu hemen ayırt edebilirsiniz.

Örnekte IP 198.51.100.23, HTTP port 8000, SOCKS5 port 1080, kullanıcı adı spx_user ve şifre spx_pass kullanılmaktadır.

HTTP proxy nasıl bağlanır?

-x (veya --proxy) seçeneğine proxy adresini girin. Kullanıcı adı ve şifreyi adresin içine ekleyebilir veya -U seçeneği ile ayrı olarak girebilirsiniz. HTTPS adresi istendiğinde, cURL CONNECT ile bir tünel oluşturur ve şifrelenmiş isteği bu tünel içinde gönderir.

# user and password inside the proxy URL
curl -x http://spx_user:spx_pass@198.51.100.23:8000 https://api.ipify.org

# or with -U
curl -x http://198.51.100.23:8000 -U spx_user:spx_pass https://api.ipify.org

SOCKS5 proxy nasıl bağlanır?

--socks5-hostname, alan adı çözümlemesini proxy tarafında yapar. Sunucunuzun DNS istekleri dışarıya yansımaz ve proxy'nin bulunduğu ülkeye göre ad çözümlemesi yapılır. --socks5, ad çözümlemesini sunucunuzda yapar ve yalnızca IP'yi proxy'ye gönderir. Çoğu durumda --socks5-hostname önerilir.

Adres formatı socks5h://, -x'e eklendiğinde aynı sonucu verir.

# DNS is resolved by the proxy
curl --socks5-hostname 198.51.100.23:1080 --proxy-user spx_user:spx_pass https://api.ipify.org

# same thing with a proxy URL
curl -x socks5h://spx_user:spx_pass@198.51.100.23:1080 https://api.ipify.org

Yanıt süresi ve durumunu birlikte görmek için ne yapmalıyım?

-w seçeneği ile bağlantı süresi, ilk bayta kadar geçen süre, toplam süre ve yanıt kodunu tek satırda çıktılayabilirsiniz. Farklı ülkelerdeki proxy'lerin hızlarını karşılaştırırken veya hedef sitenin mi yoksa proxy'nin mi yavaş olduğunu anlamak için kullanışlıdır.

-o /dev/null ile gövdeyi atıp -s ile ilerleme göstergesini kapatırsanız, yalnızca sonuçları temiz bir şekilde görürsünüz.

curl -s -o /dev/null \
  -x http://spx_user:spx_pass@198.51.100.23:8000 \
  -w "code=%{http_code} connect=%{time_connect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n" \
  https://example.com/

Listedeki tüm proxy'leri tek seferde nasıl kontrol ederim?

API ile listeyi alıp her satır için cURL çalıştırırsanız, tüm proxy'lerin durumunu bir seferde kontrol edebilirsiniz. Aşağıdaki script, ip:port:user:pass formatındaki listeyi alıp her satırın yanıt IP'sini ve geçen süreyi yazdırır. Zaman aşımı eklenerek yanıt vermeyen satırlarda takılmaz.

#!/bin/sh
KEY="YOUR_API_KEY"
curl -s -H "Authorization: Bearer $KEY" \
  "https://socks5proxy.io/api/v1/proxies/download?format=ip:port:user:pass&protocol=http" > proxies.txt

while IFS=: read -r ip port user pass; do
  out=$(curl -s -m 15 -x "http://$user:$pass@$ip:$port" -w " %{time_total}s" https://api.ipify.org)
  echo "$ip:$port $out"
done < proxies.txt

API'yi cURL ile çağırabilir miyim?

Evet. Bakiye sorgulama, aktif plan listesi, proxy listesi gibi tüm istekler Authorization: Bearer başlığı ile yapılabilir. JSON yanıtlarını jq gibi araçlarla filtreleyerek istediğiniz alanları görüntüleyebilirsiniz.

curl -H "Authorization: Bearer YOUR_API_KEY" https://socks5proxy.io/api/v1/account
curl -H "Authorization: Bearer YOUR_API_KEY" "https://socks5proxy.io/api/v1/proxies?country=us&protocol=socks5"

Çevre değişkenleriyle proxy ayarlanabilir mi?

Evet. cURL ve birçok komut satırı aracı http_proxy, https_proxy, all_proxy ortam değişkenlerini okur. Shell'de bir kez ayarladığınızda bu shell'de çalışan cURL, wget, pip gibi araçlar aynı proxy'yi kullanır. SOCKS5 için all_proxy'ye socks5h:// adresini yazmanız yeterlidir.

Proxy kullanılmasını istemediğiniz adresleri no_proxy'ye virgülle ayırarak yazın. Dahili sunuculara veya localhost'a proxy üzerinden çıkış yapılmasını engelleyebilirsiniz.

export https_proxy="http://spx_user:spx_pass@198.51.100.23:8000"
export http_proxy="$https_proxy"
export no_proxy="localhost,127.0.0.1"
curl https://api.ipify.org

# SOCKS5 for every tool that reads all_proxy
export all_proxy="socks5h://spx_user:spx_pass@198.51.100.23:1080"

HTTP proxy ve SOCKS5 proxy sonuçlarını nasıl karşılaştırırım?

Aynı IP'nin iki portu ile aynı adresi isteyip yanıt IP'sini ve süresini karşılaştırırsanız, ortamınızda hangi yöntemin daha hızlı olduğunu görebilirsiniz. Çoğu durumda benzerdir ancak hedef sunucu uzaktaysa veya DNS çözümlemesi yavaşsa fark olabilir.

Yanıt IP'si her iki yöntemde de aynı olmalıdır. Farklı çıkıyorsa, farklı satırların portlarını karıştırmış olabilirsiniz, lütfen listeyi tekrar kontrol edin.

for p in "http://spx_user:spx_pass@198.51.100.23:8000" "socks5h://spx_user:spx_pass@198.51.100.23:1080"; do
  curl -s -m 15 -x "$p" -w "  %{time_total}s\n" https://api.ipify.org
done

Sunucu, IP yetkilendirme için IP'yi nasıl doğrular?

IP yetkilendirme için kaydedilecek değer, sunucunuzun internete çıkarken kullandığı genel IPv4 adresidir. Proxy kullanmadan curl -4 https://api.ipify.org çalıştırarak bu değeri hemen görebilirsiniz. Bu değeri kontrol panelindeki IP yetkilendirme alanına kaydederseniz, o sunucudan kullanıcı adı ve şifre olmadan bağlanabilir.

curl -4 -s https://api.ipify.org

HTTPS sitelerinde proxy içeriği görebilir mi?

HTTP proxy ile HTTPS adresine istek gönderildiğinde cURL önce CONNECT ile hedef sunucuya tünel oluşturur ve bu tünel içinde hedef sunucu ile doğrudan şifreli bağlantı kurar. Proxy yalnızca hangi sunucuya bağlandığını bilir, gidip gelen içerik şifrelidir ve görülemez. -v seçeneği ile çalıştırıldığında CONNECT aşaması ve sonrasındaki şifreli bağlantı süreci görülebilir.

SOCKS5 için de aynıdır. Proxy bağlantıyı doğrudan iletir ve şifreleme cURL ile hedef sunucu arasında gerçekleşir. Bu nedenle sertifika doğrulama seçeneğini (-k) kullanmamak daha güvenlidir. Proxy üzerinden bile hedef sunucunun sertifikası doğrulanır.

--socks5-hostname kullanırsanız, bağlanmak istediğiniz alan adı da proxy tarafından çözümlenir ve sunucunuzun DNS istek kayıtlarında görünmez.

curl -v -o /dev/null -x http://spx_user:spx_pass@198.51.100.23:8000 https://example.com/ 2>&1 | grep -E "CONNECT|HTTP/|SSL connection"

cURL hata mesajları nasıl okunur?

Received HTTP code 407 from proxy after CONNECT, bu bir yetkilendirme hatasıdır. Kullanıcı adı ve şifrenizi veya IP yetkilendirmesine kayıtlı sunucu IP'nizi kontrol edin. Şifrenizde @ veya : varsa, adresin içine koymayın, bunun yerine -U veya --proxy-user ile ekleyin.

Failed to connect veya Connection timed out hataları portun uyuşmamasından veya sunucunuzdaki güvenlik duvarının giden bağlantıları engellemesinden kaynaklanabilir. HTTP adresleri için HTTP portunu, SOCKS5 için SOCKS5 portunu kullanın ve giden yöndeki portların açık olduğundan emin olun. -v seçeneği ile bağlantı sürecini adım adım görebilirsiniz.

cURL proxy kullanımı, -x ve SOCKS5 bağlantı testi | Socks5Proxy