cURL ile Proxy Kullanımı: Uygulamalı ve Üretim Odaklı Rehber

cURL ile proxy kullanımı: -x, --socks5-hostname, kimlik doğrulama, HTTPS_PROXY ortam değişkeni, IP rotasyonu ve üretim ipuçları. ProxyHat gateway'i üzerinden residential proxy örnekleri.

Using Proxies with cURL: A Code-First Guide to Residential IPs

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.

ÖzellikResidentialDatacenterMobile
Hedef başarı oranı%90–98%40–70%95–99
Hız (latensi)200–800ms50–150ms300–1200ms
FiyatOrta–yüksekDüşükYüksek
Engellenme riskiDüşükYüksekÇok düşük
Uygun kullanımSERP, fiyat izleme, sosyalBasit 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.txt dosyası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ı, -x bayrağı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 ~/.curlrc yapılandırmayı merkeze alır; --retry ve -w tanılama sağlar; xargs -P ve --parallel performansı artırır. Residential proxy'ler, zor hedeflerde datacenter'dan belirgin şekilde daha iyidir.

  • -x HTTP proxy için, --socks5-hostname (veya socks5h://) SOCKS5 için DNS sızıntısız.
  • Kullanıcı adında -country-US-city-newyork ve -session-abc123 bayrakları coğrafi hedefleme ve yapışkan oturum sağlar.
  • HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, NO_PROXY ortam değişkenleri her komutta bayrak gerektirmez.
  • ~/.curlrc ve -K ile kalıcı yapılandırma; CI/CD'de yapılandırmayı koddan ayırır.
  • --retry 3 --retry-all-errors ve -w bayrağı üretimde dayanıklılık ve tanılama sağlar.
  • --tlsv1.3, özel -H başlıkları ve --compressed hem 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.

Başlamaya hazır mısınız?

148+ ülkede 50M+ konut IP'sine AI destekli filtreleme ile erişin.

Fiyatlandırmayı GörüntüleKonut Proxy'leri
← Bloga Dön