cURL ile Proxy Kullanımı: Temel Bayraklar ve Çalışma Mantığı
cURL ile proxy kullanımı, otomasyon betiklerinizde ve scraping iş akışlarınızda IP engellerini aşmanın en hızlı yoludur. Tek bir bayrakla trafiğinizi farklı bir IP üzerinden yönlendirebilir, kimlik doğrulama ve coğrafi hedefleme ekleyebilirsiniz. Bu rehber, ProxyHat gateway'i üzerinden residential proxy'leri komut satırından nasıl kullanacağınızı uygulamalı olarak gösterir; ham cURL komutlarıyla ProxyHat SDK'sının sarmaladığı aynı uç noktaları yan yana sunar.
cURL, resmi belgelerinde proxy'yi "bir ara sunucu üzerinden bağlantı" olarak tanımlar. Temel mekanizma basittir: cURL hedefe doğrudan değil, proxy'ye bağlanır ve proxy hedefle iletişimi kurar. Bu, IP'nizi gizler ve rotasyon sağlar.
HTTP Proxy: -x / --proxy
En yaygın kullanım, -x veya --proxy bayrağıyla HTTP proxy belirtmektir:
# Temel HTTP proxy bağlantısı
curl -x http://gate.proxyhat.com:8080 \
https://httpbin.org/ip
# Kimlik doğrulama ile
curl -x http://user:pass@gate.proxyhat.com:8080 \
https://httpbin.org/ip
ProxyHat'ta kullanıcı adı, coğrafi hedefleme ve oturum bayraklarını taşır. Aşağıda bunu ayrıntılı göreceğiz.
SOCKS5 Proxy: --socks5-hostname ve socks5h://
SOCKS5, HTTP proxy'den daha esnektir; herhangi bir TCP trafiğini taşıyabilir. Ancak kritik bir ayrım vardır: DNS çözümlemesi nerede yapılır?
# SOCKS5 — DNS yerel makinede çözülür (IP sızıntısı riski!)
curl --socks5 gate.proxyhat.com:1080 \
https://httpbin.org/ip
# SOCKS5h — DNS proxy tarafında çözülür (güvenli)
curl --socks5-hostname gate.proxyhat.com:1080 \
https://httpbin.org/ip
# URL formatıyla aynı şey
curl -x socks5h://user:pass@gate.proxyhat.com:1080 \
https://httpbin.org/ip
--socks5 kullanırsanız, hedef alan adı sizin makinenizde çözülür ve proxy yalnızca IP adresine bağlanır. Bu, DNS sızıntısına yol açar. --socks5-hostname (veya socks5h://) ise alan adını proxy'ye iletir; DNS çözümlemesi proxy tarafında yapılır. Bu, residential proxy kullanırken coğrafi tutarlılık için önemlidir.
Kimlik Doğrulama ve Coğrafi Hedefleme
ProxyHat'ta kimlik doğrulama, kullanıcı adı ve parola üzerinden yapılır. Kullanıcı adı, ek bayraklar içerebilir: ülke, şehir ve oturum kimliği. curl proxy kimlik doğrulama için iki yol vardır: URL içine gömmek veya --proxy-user bayrağını kullanmak.
# ABD, New York hedefli
curl --proxy-user 'user-country-US-city-newyork:pass' \
-x http://gate.proxyhat.com:8080 \
https://httpbin.org/ip
# Almanya, Berlin hedefli
curl --proxy-user 'user-country-DE-city-berlin:pass' \
-x http://gate.proxyhat.com:8080 \
https://httpbin.org/ip
# Yapışkan oturum (sticky session) — aynı IP'yi koru
curl --proxy-user 'user-session-abc123:pass' \
-x http://gate.proxyhat.com:8080 \
https://httpbin.org/ip
Yapışkan oturumlar, çok adımlı iş akışları için kritiktir: oturum açma → ürün sepete ekleme → ödeme gibi adımların aynı IP'den gelmesi gerekir. -session-abc123 bayrağı, proxy'ye "bu oturum kimliği için aynı IP'yi tut" der. Oturum kimliğini değiştirerek yeni bir IP alırsınız.
Ortam Değişkenleri ve Yapılandırma Dosyaları
Her komutta proxy belirtmek yerine ortam değişkenleri kullanabilirsiniz. cURL, HTTP_PROXY, HTTPS_PROXY, ALL_PROXY ve NO_PROXY değişkenlerini otomatik okur. HTTPS_PROXY ortam değişkeni özellikle HTTPS trafiği için kritiktir.
# Ortam değişkenleriyle proxy ayarı
export HTTP_PROXY="http://user-country-US:pass@gate.proxyhat.com:8080"
export HTTPS_PROXY="http://user-country-US:pass@gate.proxyhat.com:8080"
export ALL_PROXY="socks5h://user:pass@gate.proxyhat.com:1080"
export NO_PROXY="localhost,127.0.0.1,.internal.example.com"
# Artık proxy bayrağı gerekmez
curl https://httpbin.org/ip
NO_PROXY, dahili servislerin proxy'den geçmesini engeller; mikroservis mimarilerinde kritiktir. Docker container'larında bu değişkenleri ENV direktifiyle ayarlayabilirsiniz.
Kalıcı Yapılandırma: ~/.curlrc
cURL, ~/.curlrc dosyasını otomatik okur. Tüm proxy ayarlarınızı tek yerde tutabilirsiniz:
# ~/.curlrc içeriği
proxy = "http://user-country-US:pass@gate.proxyhat.com:8080"
retry = 3
retry-all-errors
compressed
user-agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36"
max-time = 30
Dosyayı -K bayrağıyla da belirtebilirsiniz:
curl -K ./proxyhat-config.txt https://httpbin.org/ip
Bu yaklaşım, CI/CD boru hatlarında ve Docker container'larında yapılandırmayı koddan ayırır. ProxyHat fiyatlandırma planınızı değiştirdiğinizde yalnızca bir dosyayı güncellersiniz.
Residential vs Datacenter Proxy'ler: Zor Hedeflerde Fark
Residential proxy'ler, gerçek İSS'lere ait IP'lerden gelir; datacenter proxy'ler ise AWS, Google Cloud gibi bulut sağlayıcılarının IP bloklarından. Zor hedefler — sosyal medya platformları, bilet siteleri, e-ticaret fiyat izleme sistemleri — datacenter IP'lerini kolayca tespit edip engeller. Residential IP'ler ise "gerçek kullanıcı" trafiğine benzer göründüğü için daha yüksek başarı oranı sağlar.
| Özellik | Residential | Datacenter | Mobile |
|---|---|---|---|
| Hedef başarı oranı | %90–98 | %40–70 | %95–99 |
| Hız (latensi) | 200–800ms | 50–150ms | 300–1200ms |
| Fiyat | Orta–yüksek | Düşük | Yüksek |
| Engellenme riski | Düşük | Yüksek | Çok düşük |
| Uygun kullanım | SERP, fiyat izleme, sosyal | Basit API çağrıları | Mobil uygulama testi |
SERP izleme ve web scraping gibi kullanım senaryolarında residential proxy'ler neredeyse zorunludur. SERP takibi için ProxyHat'ın lokasyon sayfasından ihtiyacınız olan ülke/kombinasyonunu kontrol edebilirsiniz.
IP Rotasyonu: Bash While Döngüsüyle
ProxyHat'ın her istek için yeni IP atamasından yararlanarak, bir URL listesini dolaşabilir ve her istekte IP'yi değiştirebilirsiniz:
#!/usr/bin/env bash
set -euo pipefail
URLS=(
"https://example.com/page1"
"https://example.com/page2"
"https://example.com/page3"
"https://example.com/page4"
"https://example.com/page5"
)
for url in "${URLS[@]}"; do
# Her istek için benzersiz oturum kimliği = yeni IP
SESSION="sess-$(date +%s)-$RANDOM"
curl \
-x "http://user-session-${SESSION}:pass@gate.proxyhat.com:8080" \
--retry 3 \
--retry-all-errors \
--retry-delay 2 \
--max-time 30 \
--compressed \
-w "\n%{http_code} %{time_total}s %{remote_ip}\n" \
-o /dev/null \
-s \
"$url"
done
--retry 3 --retry-all-errors kombinasyonu, 4xx dahil tüm hatalarda 3 kez yeniden dener. -w bayrağı, HTTP durum kodunu, toplam süreyi ve uzak IP'yi yazdırır; bu, tanılama için kritiktir.
Daha sağlam bir sürüm, başarısız URL'leri bir dosyaya yazar:
#!/usr/bin/env bash
set -uo pipefail
INPUT="urls.txt"
FAILED="failed.txt"
: > "$FAILED"
while IFS= read -r url; do
[ -z "$url" ] && continue
SESSION="sess-$(date +%s%N)-$RANDOM"
HTTP_CODE=$(curl \
-x "http://user-session-${SESSION}:pass@gate.proxyhat.com:8080" \
--retry 3 \
--retry-all-errors \
--retry-delay 2 \
--max-time 30 \
--compressed \
-H "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
-o /dev/null \
-s \
-w "%{http_code}" \
"$url")
if [ "$HTTP_CODE" != "200" ]; then
echo "$url" >> "$FAILED"
echo "FAIL: $url → HTTP $HTTP_CODE"
else
echo "OK: $url → HTTP $HTTP_CODE"
fi
done < "$INPUT"
echo "Tamamlandı. Başarısız: $(wc -l < "$FAILED") URL."
Üretim İpuçları: TLS, Başlıklar, Paralellik
TLS 1.3 ve Güvenlik
Eski TLS sürümleri, bazı hedefler tarafından şüpheli işaretlenir. --tlsv1.3 ile modern şifreleme zorunlu kılın:
curl \
--tlsv1.3 \
--tls-max 1.3 \
-x "http://user-country-US:pass@gate.proxyhat.com:8080" \
https://example.com
TLS 1.3, RFC 8446 ile standartlaştırılmıştır ve önceki sürümlere göre daha hızlı el sıkışma (handshake) sağlar.
Özel Başlıklar ve Sıkıştırma
Varsayılan cURL User-Agent'ı (curl/x.y.z) çoğu anti-bot sistemi tarafından engellenir. Gerçekçi bir User-Agent ve --compressed bayrağı ekleyin:
curl \
-x "http://user-country-DE:pass@gate.proxyhat.com:8080" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" \
-H "Accept-Language: de-DE,de;q=0.9,en;q=0.8" \
--compressed \
https://example.com
--compressed, Accept-Encoding: gzip gönderir ve yanıtı otomatik açar — bant genişliğini %60–80 azaltabilir. Yüksek hacimli scraping iş akışlarında bu fark belirgindir.
Paralellik: xargs -P ve curl --parallel
Tek iş parçacığıyla yüzlerce URL taramak yavaştır. xargs -P ile paralel istekler yapın:
# 10 paralel bağlantı ile URL listesini tara
cat urls.txt | xargs -P 10 -I {} sh -c '
SESSION="sess-$(date +%s%N)-$RANDOM"
curl -s \
-x "http://user-session-${SESSION}:pass@gate.proxyhat.com:8080" \
--max-time 30 \
--compressed \
-w "%{http_code} %{time_total}s {}\n" \
-o /dev/null \
"{}"
'
cURL 7.66+'da --parallel bayrağı da vardır:
# Tek cURL sürecinde paralel istekler
curl --parallel --parallel-immediate --parallel-max 10 \
-x "http://user-country-US:pass@gate.proxyhat.com:8080" \
--config urls_config.txt
Her URL'yi url = "..." formatında urls_config.txt dosyasına koyun. --parallel-max 10, aynı anda en fazla 10 bağlantı açar. ProxyHat, planınıza bağlı olarak 100+ eşzamanlı oturumu destekler; aşırı paralellik yine de hedef tarafında rate-limit tetikleyebilir.
ProxyHat SDK'sı ve Ham cURL Karşılaştırması
ProxyHat SDK'sı, aynı gateway uç noktalarını sarmalar ve dil bazlı istisnalar, otomatik yeniden deneme ve oturum yönetimi sağlar. Ancak ham cURL, kabuk betiklerinde ve hızlı tanılamada yerini tutamaz. İkisini yan yana kullanmak en pratik yaklaşımdır.
# Ham cURL: hızlı tanılama ve betikler
curl -x "http://user-country-US:pass@gate.proxyhat.com:8080" \
https://httpbin.org/ip
# ProxyHat SDK: yapılandırılmış yeniden deneme
# Python, Node.js vb. dillerde aynı gate.proxyhat.com uç noktası
# SDK, oturum rotasyonunu ve hata yönetimini otomatikleştirir
ProxyHat belgelerinde SDK entegrasyon örnekleri ve dil bazlı kod parçaları bulunabilir.
Hukuki Notlar ve Etik Kullanım
Proxy kullanımı tek başına herhangi bir hukuki sorumluluk doğurmaz; ancak hedef siteyle etkileşim şekliniz doğurabilir. ABD'de CFAA (Computer Fraud and Abuse Act), yetkisiz erişimi yasaklar. AB'de GDPR, kişisel verilerin işlenmesini düzenler. Herkese açık veriye erişim genellikle sorun teşkil etmez, ancak şu kurallara dikkat edin:
robots.txtdosyasına saygı gösterin.- Hedef sitenin Hizmet Şartları'nı (ToS) okuyun.
- Rate-limit'e uyun; aşırı istek hedefi DoS'a benzeyebilir.
- Kişisel veri topluyorsanız GDPR/CCPA uyumluluğu sağlayın.
- Mümkünse resmi API kullanın; daha güvenilir ve genellikle daha hızlıdır.
Resmi API mevcutsa, proxy + scraping yerine API'yi tercih edin. API'ler daha az kırılgandır, daha tutarlı veri sağlar ve hukuki riski azaltır. Proxy'ler, API'nin olmadığı veya kısıtlı olduğu durumlarda en değerlidir.
Önemli Çıkarımlar
Özet: cURL ile proxy kullanımı,
-xbayrağıyla başlar;socks5h://DNS sızıntısını önler; kullanıcı adında coğrafi hedefleme ve yapışkan oturumlar mümkündür; ortam değişkenleri ve~/.curlrcyapılandırmayı merkeze alır;--retryve-wtanılama sağlar;xargs -Pve--parallelperformansı artırır. Residential proxy'ler, zor hedeflerde datacenter'dan belirgin şekilde daha iyidir.
-xHTTP proxy için,--socks5-hostname(veyasocks5h://) SOCKS5 için DNS sızıntısız.- Kullanıcı adında
-country-US-city-newyorkve-session-abc123bayrakları coğrafi hedefleme ve yapışkan oturum sağlar. HTTP_PROXY,HTTPS_PROXY,ALL_PROXY,NO_PROXYortam değişkenleri her komutta bayrak gerektirmez.~/.curlrcve-Kile kalıcı yapılandırma; CI/CD'de yapılandırmayı koddan ayırır.--retry 3 --retry-all-errorsve-wbayrağı üretimde dayanıklılık ve tanılama sağlar.--tlsv1.3, özel-Hbaşlıkları ve--compressedhem güvenliği hem de uyumluluğu artırır.- Hukuki uyum için robots.txt, ToS ve GDPR/CFAA'ya dikkat edin; resmi API varsa onu tercih edin.






