cURL ile proxy kullanımı, komut satırından web verisi toplamak isteyen her backend mühendisinin, DevOps uzmanının ve otomasyon geliştiricisinin bilmesi gereken temel bir beceridir. cURL, proxy desteğini yerleşik olarak sunar; doğru bayrakları ve kimlik doğrulama yöntemlerini bildiğinizde, residential proxy'lerle yüksek başarı oranlarına ulaşabilirsiniz. Bu rehberde, ProxyHat ağ geçidi üzerinden hem HTTP hem de SOCKS5 proxy'leri nasıl yapılandıracağınızı, IP rotasyonunu nasıl otomatikleştireceğinizi ve üretim düzeyinde hataları nasıl yöneteceğinizi adım adım göstereceğiz.
cURL ile Proxy Kullanımı: Temel Bayraklar ve Bağlantı Mantığı
cURL, proxy bağlantıları için iki ana mekanizma sunar: HTTP/SOCKS proxy tüneli ve ortam değişkenleri. En doğrudan yöntem, -x veya --proxy bayrağıyla proxy URL'sini belirtmektir. ProxyHat HTTP ağ geçidi için varsayılan port 8080'dir:
# Basit HTTP proxy bağlantısı
curl -x http://gate.proxyhat.com:8080 \
--proxy-user 'kullanici:sifre' \
https://httpbin.org/ip
SOCKS5 kullanırken --socks5-hostname bayrağı kritik bir fark yaratır. Bu bayrak, DNS çözümlemesinin proxy tarafında yapılmasını sağlar ve yerel DNS sızıntılarını önler. Sıradan --socks5 bayrağı DNS'i istemcide çözer ve hedef alan adını proxy'ye IP olarak gönderir; bu da bazı hedeflerin coğrafi filtrelemesinde sorun yaratabilir. ProxyHat SOCKS5 portu 1080'dir:
# SOCKS5 ile DNS proxy tarafında çözülür (socks5h davranışı)
curl --socks5-hostname gate.proxyhat.com:1080 \
--proxy-user 'kullanici:sifre' \
https://httpbin.org/ip
# Aynı şeyi URL formatıyla da yazabilirsiniz:
curl -x socks5h://kullanici:sifre@gate.proxyhat.com:1080 \
https://httpbin.org/ip
socks5h:// şeması, --socks5-hostname bayrağının eşdeğeridir; 'h' son eki DNS çözümlemesinin proxy'ye bırakıldığını belirtir. cURL resmi belgeleri, DNS sızıntılarını önlemek için her zaman socks5h kullanılmasını önerir.
HTTP Proxy vs SOCKS5 Proxy Karşılaştırması
| Özellik | HTTP Proxy (8080) | SOCKS5 Proxy (1080) |
|---|---|---|
| Protokol katmanı | Uygulama katmanı (HTTP/HTTPS) | Oturum katmanı (herhangi bir TCP) |
| DNS çözümleme | Proxy tarafında | socks5h ile proxy tarafında |
| HTTPS desteği | CONNECT tüneli ile | Doğal (her TCP trafiği) |
| Performans | Daha hızlı (daha az overhead) | Biraz daha yavaş (ekstra katman) |
| Uygun senaryo | Web scraping, API istekleri | HTTP dışı trafiği tünelleme |
Kimlik Doğrulama ve Geo-Hedefleme
ProxyHat, kimlik doğrulama bilgilerini ve geo-hedefleme parametrelerini kullanıcı adının içine gömer. Bu, proxy URL'sini değiştirmeden farklı ülkeler, şehirler ve oturumlar arasında geçiş yapabileceğiniz anlamına gelir. Kullanıcı adı formatı şu şekildedir:
# Ülke düzeyinde geo-hedefleme
curl -x http://user-country-US:pass@gate.proxyhat.com:8080 \
https://httpbin.org/ip
# Şehir düzeyinde geo-hedefleme
curl -x http://user-country-DE-city-berlin:pass@gate.proxyhat.com:8080 \
https://httpbin.org/ip
# Sticky session (IP'yi sabit tutar)
curl -x http://user-session-abc123:pass@gate.proxyhat.com:8080 \
https://httpbin.org/ip
--proxy-user bayrağı ile kullanıcı adını ve şifreyi ayrı parametre olarak da geçebilirsiniz; bu, URL'de özel karakter kodlaması sorunlarını önler:
# --proxy-user ile kimlik doğrulama
curl -x http://gate.proxyhat.com:8080 \
--proxy-user 'user-country-US-city-newyork:pass' \
https://httpbin.org/ip
Sticky session'lar, çok adımlı oturumlar (örneğin login → sepet → ödeme) için kritiktir. Aynı session-abc123 değerini kullandığınız sürece, ProxyHat aynı çıkış IP'sini atamaya devam eder. Yeni bir session ID ürettiğinizde yeni bir IP alırsınız.
Ortam Değişkenleri ve Yapılandırma Dosyaları
cURL, ortam değişkenlerinden proxy yapılandırmasını otomatik olarak okur. HTTPS_PROXY ortam değişkeni, HTTPS istekleri için proxy'yi ayarlar ve bu, script'lerde her curl komutuna -x eklemekten daha pratiktir:
# 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-country-US:pass@gate.proxyhat.com:1080"
# Belirli alanları proxy'den muaf tut
export NO_PROXY="localhost,127.0.0.1,.internal.company.com"
# Artık -x bayrağına gerek yok
curl https://httpbin.org/ip
Kalıcı yapılandırma için ~/.curlrc dosyası kullanabilirsiniz. Bu dosya her cURL çağrısında otomatik okunur:
# ~/.curlrc içeriği
proxy = http://user-country-US:pass@gate.proxyhat.com:8080
proxy-user = "user-country-US:pass"
compressed
location
max-time = 30
retry = 3
retry-all-errors
user-agent = "Mozilla/5.0 (compatible; MyBot/1.0)"
Daha modüler bir yaklaşım için -K bayrağıyla özel yapılandırma dosyaları yükleyebilirsiniz. Bu, farklı projeler için farklı proxy profilleri tutmanızı sağlar:
# proxy-us.conf dosyası
proxy = "http://user-country-US:pass@gate.proxyhat.com:8080"
compressed = true
retry = 5
retry-all-errors = true
max-time = 45
# Kullanım
curl -K proxy-us.conf https://httpbin.org/ip
Residential Proxy'ler Neden Datacenter IP'lerden Daha Etkilidir?
Datacenter IP'leri, genellikle AWS, Google Cloud veya DigitalOcean gibi bulut sağlayıcılarına ait ASN'lere sahiptir. Birçok web sitesi bu ASN'leri tespit edip engeller; çünkü datacenter IP'leri genellikle bot trafiğiyle ilişkilendirilir. Residential proxy'ler ise gerçek İSS'lere ait IP'leri kullanır ve hedef siteler için sıradan bir kullanıcıdan ayırt edilemezler.
Bu fark, zor hedeflerde başarı oranını dramatik şekilde etkiler. Datacenter IP'lerle bir e-ticaret sitesini scrape ettiğinizde ilk birkaç istekten sonra 403 veya CAPTCHA alabilirsiniz. Residential proxy'lerle aynı siteye yüzlerce istek gönderebilirsiniz. Wikipedia'da proxy sunucuları hakkında daha fazla arka plan bilgisi bulabilirsiniz.
ProxyHat'ın residential ağı, gerçek mobil ve ev cihazlarından gelen IP'leri kullanır. web scraping kullanım senaryosu sayfamızda bu avantajları detaylıca inceleyebilirsiniz.
Bash While Döngüsü ile IP Rotasyonu
Aşağıdaki örnek, bir URL listesini residential proxy'lerle dolaşırken her istek için yeni bir session ID üretir. --retry ve --retry-all-errors bayrakları, geçici hatalarda otomatik yeniden deneme yapar; -w bayrağı ise zamanlama tanılama bilgileri yazdırır:
#!/usr/bin/env bash
set -euo pipefail
URLS=("https://example.com/page1" "https://example.com/page2" "https://example.com/page3")
PROXY_BASE="http://gate.proxyhat.com:8080"
USER="user"
PASS="pass"
for url in "${URLS[@]}"; do
# Her istek için benzersiz session ID
SESSION_ID="sess-$(date +%s%N | md5sum | head -c 8)"
PROXY_USER="${USER}-country-US-session-${SESSION_ID}:${PASS}"
echo "--- Fetching: $url (session: $SESSION_ID) ---"
curl -x "$PROXY_BASE" \
--proxy-user "$PROXY_USER" \
--retry 5 \
--retry-all-errors \
--retry-delay 2 \
--max-time 30 \
--compressed \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
-w "\nHTTP %{http_code} | DNS %{time_namelookup}s | Connect %{time_connect}s | Total %{time_total}s\n" \
"$url" 2>&1
done
Bu script her URL için ayrı bir çıkış IP'si kullanır. --retry 5 bayrağı, başarısız istekleri 5 kez yeniden dener; --retry-delay 2 ise denemeler arasına 2 saniye bekler. -w formatı, DNS çözümleme süresi, bağlantı süresi ve toplam süreyi gösterir; bu bilgiler performans darboğazlarını tespit etmenize yardımcı olur.
Üretim İpuçları: TLS, Header'lar ve Paralellik
TLS 1.3 ve Güvenlik Ayarları
Modern hedef siteler, eski TLS sürümlerini kullanan istemcileri şüpheli olarak işaretleyebilir. --tlsv1.3 bayrağı, yalnızca TLS 1.3 kullanılmasını zorunlu kılar ve parmak izi takibini zorlaştırır:
# TLS 1.3 zorunlu + özel header'lar
curl -x http://gate.proxyhat.com:8080 \
--proxy-user 'user-country-DE:pass' \
--tlsv1.3 \
--compressed \
-H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" \
-H "Accept: text/html,application/xhtml+xml" \
-H "Accept-Language: de-DE,de;q=0.9,en;q=0.8" \
-H "Accept-Encoding: gzip, deflate, br" \
https://example.de/
xargs ile Paralel İstekler
Binlerce URL'i sıralı olarak dolaşmak yavaştır. xargs -P ile paralellik sağlayabilirsiniz:
# 10 paralel istek
cat urls.txt | xargs -P 10 -I {} curl -s \
-x http://gate.proxyhat.com:8080 \
--proxy-user 'user-country-US:pass' \
--retry 3 \
--retry-all-errors \
--max-time 20 \
--compressed \
-o /dev/null -w "%{http_code} %{url_effective} %{time_total}s\n" \
{}
cURL 7.66.0 ve sonrasında --parallel bayrağı da kullanılabilir:
# curl --parallel ile çoklu URL
curl --parallel \
--parallel-max 10 \
-x http://gate.proxyhat.com:8080 \
--proxy-user 'user-country-US:pass' \
--config urls.conf
--parallel-max 10 ile aynı anda en fazla 10 istek çalışır. ProxyHat residential ağı yüksek eşzamanlılığı destekler; fiyatlandırma sayfamızda paket bazlı eşzamanlı bağlantı limitlerini görebilirsiniz.
ProxyHat SDK ile Programatik Erişim
cURL komut satırı mükemmel olsa da, daha karmaşık otomasyonlar için ProxyHat SDK'sı aynı ağ geçidi uç noktalarını sarmalar. Aşağıdaki Python örneği, cURL'de kullandığınız aynı parametreleri SDK üzerinden gösterir:
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
import random
import string
# ProxyHat residential proxy yapılandırması
def make_proxy_url(country="US", city=None, session_id=None):
username = f"user-country-{country}"
if city:
username += f"-city-{city}"
if session_id:
username += f"-session-{session_id}"
return f"http://{username}:pass@gate.proxyhat.com:8080"
# Retry stratejisi ile session
session = requests.Session()
retry = Retry(
total=5,
backoff_factor=2,
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods=["GET", "POST"]
)
adapter = HTTPAdapter(max_retries=retry, pool_connections=10, pool_maxsize=10)
session.mount("http://", adapter)
session.mount("https://", adapter)
urls = [
"https://httpbin.org/ip",
"https://httpbin.org/headers",
"https://httpbin.org/user-agent",
]
for url in urls:
sid = "".join(random.choices(string.ascii_lowercase + string.digits, k=8))
proxy_url = make_proxy_url(country="US", session_id=sid)
proxies = {"http": proxy_url, "https": proxy_url}
try:
resp = session.get(
url,
proxies=proxies,
timeout=30,
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"Accept": "application/json",
},
)
print(f"[{resp.status_code}] {url} -> {resp.json()}")
except Exception as e:
print(f"[ERROR] {url}: {e}")
Bu yaklaşım, cURL'deki --retry, --proxy-user ve -w mantığını Python'da yeniden üretir. ProxyHat belgelerinde SDK ve API entegrasyonları hakkında daha fazla bilgi bulabilirsiniz.
Node.js ile Async Proxy İstekleri
const axios = require('axios');
const axiosRetry = require('axios-retry');
// Retry yapılandırması
axiosRetry(axios, {
retries: 5,
retryDelay: (count) => count * 2000,
retryCondition: (err) =>
err.response?.status === 429 ||
err.response?.status >= 500 ||
err.code === 'ECONNRESET',
});
const urls = [
'https://httpbin.org/ip',
'https://httpbin.org/headers',
'https://httpbin.org/uuid',
];
async function fetchWithProxy(url, sessionId) {
const proxyUrl = `http://user-country-US-session-${sessionId}:pass@gate.proxyhat.com:8080`;
try {
const resp = await axios.get(url, {
proxy: {
host: 'gate.proxyhat.com',
port: 8080,
auth: {
username: `user-country-US-session-${sessionId}`,
password: 'pass',
},
},
timeout: 30000,
headers: {
'User-Agent': 'Mozilla/5.0 (compatible; MyBot/1.0)',
},
});
console.log(`[${resp.status}] ${url}`);
return resp.data;
} catch (err) {
console.error(`[ERR] ${url}: ${err.message}`);
return null;
}
}
// Paralel istekler
(async () => {
const promises = urls.map((url, i) =>
fetchWithProxy(url, `sess-${Date.now()}-${i}`)
);
const results = await Promise.allSettled(promises);
console.log(`Tamamlanan: ${results.filter(r => r.status === 'fulfilled').length}/${urls.length}`);
})();
Hukuki Not: Kamuya Açık Veriye Erişim ve Sınırlar
Proxy kullanarak veri toplarken, hukuki sınırlara dikkat etmek kritiktir. Amerika Birleşik Devletleri'nde Computer Fraud and Abuse Act (CFAA), yetkisiz erişimi yasaklar; ancak Van Buren v. United States (2021) kararından sonra, kamuya açık verilere erişim daha geniş bir koruma kazanmıştır. Yine de, bir sitenin robots.txt dosyasını ve Hizmet Şartları'nı (ToS) ihlal etmek hukuki risk oluşturabilir.
Avrupa Birliği'nde GDPR, kişisel verilerin işlenmesini düzenler. Eğer topladığınız veriler kişisel veri içeriyorsa (isim, e-posta, IP adresi vb.), GDPR kapsamında işlemelisiniz. Her zaman öncelikle hedef platformun resmi bir API'si olup olmadığını kontrol edin; API'ler genellikle daha güvenilir, daha hızlı ve hukuki olarak daha az risklidir. SERP takibi gibi kullanım senaryolarında, Google'ın resmi Search Console API'si veya SERP API'leri daha uygun olabilir.
ProxyHat lokasyonları sayfasından 190+ ülke düzeyinde geo-hedefleme yapabilirsiniz; bu, yerel arama sonuçlarını test etmek için kullanışlıdır.
Temel Çıkarımlar
cURL ile proxy kullanımı sırasında akılda tutulması gereken kritik noktalar:
- SOCKS5 kullanırken her zaman
socks5h://veya--socks5-hostnamekullanın — DNS sızıntılarını önler.- Kullanıcı adına geo-hedefleme ve session parametreleri gömün —
user-country-US-session-abc123formatı esneklik sağlar.- Ortam değişkenleri ve
~/.curlrcile tekrarlanabilir yapılandırmalar oluşturun — her komutta bayrak tekrarından kaçının.- Residential proxy'ler, zor hedeflerde datacenter IP'lere göre 3-5x daha yüksek başarı oranı sunar.
--retry,--retry-all-errorsve-wile üretim düzeyinde dayanıklılık ve tanılama sağlayın.- Paralellik için
xargs -Pveya--parallelkullanın — ama eşzamanlı bağlantı limitlerinizi aşmayın.- Her zaman
robots.txt, ToS ve GDPR/CFAA uyumunu kontrol edin — resmi API varsa onu tercih edin.
SSS
cURL ile proxy kullanımı nedir?
cURL ile proxy kullanımı, -x/--proxy bayrağı veya HTTP_PROXY/HTTPS_PROXY ortam değişkenleri aracılığıyla cURL isteklerini bir proxy sunucusu üzerinden yönlendirmektir. Bu, IP rotasyonu, geo-hedefleme ve kimlik gizleme için kullanılır. ProxyHat ağ geçidi gate.proxyhat.com:8080 (HTTP) veya :1080 (SOCKS5) üzerinden bağlantı kabul eder.
cURL ile proxy kullanımı proxy kullanıcıları için neden önemlidir?
Doğru proxy yapılandırması, IP engellemelerini azaltır, istek başarı oranını yükseltir ve coğrafi olarak hedeflenmiş içeriklere erişim sağlar. Özellikle residential proxy'lerle kullanıldığında, veri toplama süreçlerinde 200ms'lik yanıt süreleri ve %90+ başarı oranları mümkündür. Yanlış yapılandırma ise DNS sızıntılarına, kimlik doğrulama hatalarına ve hızlı IP ban'larına yol açar.
cURL ile proxy kullanımı için en iyi proxy tipi hangisidir?
Zor hedefler (e-ticaret, sosyal medya, SERP) için residential proxy'ler en iyi seçenektir; çünkü gerçek İSS IP'leri kullanırlar ve bot tespit sistemlerinden geçer. Datacenter proxy'ler daha hızlı ve daha ucuzdur ancak kolayca tespit edilirler. HTTP scraping için HTTP proxy (port 8080) yeterlidir; HTTP dışı trafiği tünellemek için SOCKS5 (port 1080) daha uygundur.
cURL ile proxy kullanırken engellemeleri nasıl önlersiniz?
Engellemeleri önlemek için: her istekte yeni session ID ile IP rotasyonu yapın, --tlsv1.3 ile modern TLS kullanın, gerçekçi User-Agent ve Accept header'ları gönderin, --retry ile geçici hataları otomatik yeniden deneyin, ve socks5h:// ile DNS sızıntılarını önleyin. Ayrıca, istekler arasına rastgele gecikmeler eklemek ve paralellik seviyesini hedef sitenin toleransına göre ayarlamak da önemlidir.






