curl'da proxy yapılandırması esas olarak -x veya --proxy komut satırı bayrağıyla yönetilir; sözdizimi [protocol://][user:password@]host[:port] şeklindedir. Kalıcı yapılandırmalar için http_proxy ve https_proxy gibi ortam değişkenlerinden yararlanabilir veya HTTP, SOCKS4 ya da SOCKS5 sunucuları üzerinden yönlendirmeyi otomatikleştirmek için ayarları bir .curlrc yapılandırma dosyasında tanımlayabilirsiniz.
curl proxy sözdizimini anlamak
curl aracı, URL'ler üzerinden veri aktarımında sektör standardıdır ve proxy uygulaması sağlamdır. Bir isteği proxy üzerinden yönlendirmenin en doğrudan yöntemi -x (küçük harf) veya --proxy bayrağını kullanmaktır. Varsayılan olarak, proxy dizesinde herhangi bir protokol belirtilmezse curl proxy'nin bir HTTP sunucusu olduğunu varsayar.
Standart bir proxy komutu şöyle görünür:
curl -x 127.0.0.1:8080 https://api.gproxy.com/v1/data
Ancak GProxy'nin residential ve veri merkezi ürünleri dahil olmak üzere modern proxy hizmetleri çoğu zaman kimlik doğrulama ister. Bu, doğrudan URL dizesi içinde veya ayrı bayraklarla halledilebilir. Kimlik bilgilerini URL içinde geçirmek pratiktir ancak parolaları kabuk geçmişinde açığa çıkarabilir.
# Proxy URL'si içinde kimlik doğrulama
curl -x http://username:[email protected]:9000 https://example.com
# --proxy-user bayrağıyla kimlik doğrulama (daha güvenli)
curl --proxy-user "username:password" -x proxy.gproxy.com:9000 https://example.com
GProxy kullanırken genellikle bir backconnect ağ geçidiyle çalışırsınız. Yani tek bir uç noktaya bağlanırsınız ve IP adreslerinin rotasyonunu arka planda GProxy altyapısı yürütür. Bu, curl komutlarınızı basitleştirir: her istek için proxy IP'sini elle değiştirmeniz gerekmez, yalnızca ağ geçidiyle bağlantıyı sürdürürsünüz.

HTTP ve HTTPS proxy yapılandırmaları
HTTP proxy'ler en yaygın olsa da, bir HTTP proxy ile HTTPS (şifreli) proxy arasında fark vardır. Bir HTTP proxy, proxy üzerinden bir "tünel" kuran CONNECT yöntemiyle HTTPS sitelerini yine de getirebilir. Bu senaryoda proxy, içinden geçen şifreli içeriği göremez.
Tünelleme mekanizması
curl -x http://proxy.com:80 https://target.com komutunu çalıştırdığınızda curl, proxy'ye bir CONNECT target.com:443 HTTP/1.1 isteği gönderir. Proxy izin verirse HTTP/1.1 200 Connection Established yanıtını döndürür ve curl bu tünel üzerinden hedef sunucuyla standart bir TLS el sıkışması gerçekleştirir.
SSL sertifikası sorunlarıyla başa çıkmak
Trafiği inceleme amacıyla araya giren bir proxy kullanıyorsanız (kurumsal ortamlarda veya hata ayıklamada yaygındır) SSL sertifikası hatalarıyla karşılaşabilirsiniz. Bunları atlamak için -k veya --insecure bayrağını kullanabilirsiniz ama bu bir güvenlik riskidir. Daha iyi bir yaklaşım, proxy'nin CA sertifikasını curl'a vermektir:
curl --proxy-cacert cert.pem -x https://proxy.gproxy.com:443 https://example.com
Otomasyon için ortam değişkenlerini kullanmak
Proxy'leri birden çok araçta veya tekrarlanan curl çağrılarında kullanması gereken geliştiriciler için ortam değişkenleri daha verimlidir. curl birkaç değişkeni tanır:
http_proxy: HTTP istekleri için kullanılır.https_proxy: HTTPS istekleri için kullanılır.all_proxy: ilgili özel değişken ayarlanmamışsa tüm protokoller için yedek.no_proxy: proxy'yi atlaması gereken, virgülle ayrılmış host listesi.
Linux veya macOS ortamında bunları .bashrc ya da .zshrc dosyanızda tanımlayabilirsiniz:
export http_proxy="http://user:[email protected]:8080"
export https_proxy="http://user:[email protected]:8080"
export no_proxy="localhost,127.0.0.1,internal.corp"
SOCKS proxy'ler: SOCKS4, SOCKS5 ve SOCKS5h
SOCKS proxy'ler HTTP proxy'lerden daha alt bir katmanda çalışır; bu da onları farklı trafik türleri (TCP/UDP) için daha esnek kılar. Kimlik doğrulamayı ve IPv6'yı desteklediği için tercih edilen sürüm SOCKS5'tir.
Kritik fark: SOCKS5 ile SOCKS5h
curl ile SOCKS proxy kullanırken yapılan yaygın bir hata, yerel ve uzak DNS çözümlemesini ayırt etmemektir. socks5:// kullanırsanız, hostname'i (örneğin example.com) yerel makineniz bir IP adresine çözer ve ardından proxy'den bu IP'ye bağlanmasını ister. Bu, trafik proxy üzerinden gitse bile ISP'nizin hangi alan adlarını ziyaret ettiğinizi görebildiği "DNS sızıntılarına" yol açabilir.
socks5h:// kullanmak curl'a hostname'i proxy sunucusuna iletmesini ve DNS çözümlemesini proxy'nin yapmasını söyler. Bu, gizlilik açısından ve yerel olarak çözümlenemeyen onion servislerine ya da iç ağ hostname'lerine erişmek için şarttır.
# Yerel DNS çözümlemesiyle SOCKS5
curl -x socks5://127.0.0.1:1080 https://example.com
# Uzak DNS çözümlemesiyle SOCKS5 (önerilir)
curl -x socks5h://127.0.0.1:1080 https://example.com
SOCKS5'i GProxy ile kullanmak
GProxy, toplu veri kazıma veya soket tabanlı uygulamalar gibi görevler için yüksek performanslı, düşük gecikmeli bağlantı arayan kullanıcılara SOCKS5 uç noktaları sunar. Sözdizimi aynı kalır:
curl -x socks5h://username:[email protected]:1080 https://api.target.com

Gelişmiş curl proxy özellikleri ve sorun giderme
Uzman kullanıcıların çoğu zaman basit bir bağlantıdan fazlasına ihtiyacı olur. curl, karmaşık ağ işlemleri sırasında proxy davranışını ince ayarlamak için gelişmiş bayraklar sunar.
Proxy başlıkları ve User-Agent değerleri
Bazen hedef sunucuya değil, doğrudan proxy'nin kendisine belirli başlıklar göndermeniz gerekir. --proxy-header bayrağı buna izin verir. Bu, bazı üst düzey proxy altyapılarının istediği özel oturum kimliklerini veya kimlik doğrulama belirteçlerini iletmek için kullanışlıdır.
curl --proxy-header "X-Custom-Proxy-Header: Value" -x proxy.gproxy.com:8080 https://example.com
Verbose modda hata ayıklama
Bir proxy bağlantısı başarısız olduğunda ilk adım her zaman -v (verbose) veya --trace bayraklarını kullanmaktır. Bu, curl ile proxy arasındaki "el sıkışmasını" gösterir.
curl -v -x http://proxy.gproxy.com:8080 https://example.com
Verbose çıktısında şu HTTP durum kodlarına bakın:
- 407 Proxy Authentication Required: kimlik bilgileriniz eksik veya hatalı.
- 502 Bad Gateway: proxy sunucusunun kendisi hedefe ulaşamıyor ya da aşırı yüklenmiş.
- 504 Gateway Timeout: proxy yanıt vermekte çok gecikti.
Python ile proxy kontrollerini otomatikleştirme
curl bir komut satırı aracı olsa da çoğu zaman betikler üzerinden çağrılır. GProxy rotasyonlarını yönetmek için Python'da bir sarmalayıcı geliştiriyorsanız, dinamik proxy ayarlarıyla curl komutlarını çalıştırmak üzere subprocess modülünü kullanabilirsiniz.
import subprocess
def fetch_with_proxy(url, proxy_url):
"""
Belirtilen bir proxy üzerinden curl komutu çalıştırır.
"""
command = [
"curl",
"-L", # Yönlendirmeleri izle
"-x", proxy_url,
"-w", "%{http_code}", # Sonunda durum kodunu yaz
"-o", "output.html", # Gövdeyi dosyaya kaydet
"-s", # Sessiz mod
url
]
try:
result = subprocess.run(command, capture_output=True, text=True, check=True)
print(f"Request successful. Status code: {result.stdout}")
except subprocess.CalledProcessError as e:
print(f"Error occurred: {e.stderr}")
# GProxy residential uç noktasıyla örnek kullanım
gproxy_endpoint = "http://user123:[email protected]:9000"
fetch_with_proxy("https://api.ipify.org", gproxy_endpoint)
Protokol karşılaştırması: curl için doğru proxy'yi seçmek
HTTP ile SOCKS5 arasındaki seçim kullanım senaryonuza bağlıdır. HTTP proxy'ler başlıkları daha verimli işleyebildiği için web scraping'de genellikle daha hızlıdır; SOCKS5 ise HTTP dışı protokoller için veya (uzak DNS sayesinde) azami anonimlik gerektiğinde daha uygundur.
| Özellik | HTTP proxy | SOCKS5 proxy | SOCKS5h proxy |
|---|---|---|---|
| OSI katmanı | Katman 7 (Uygulama) | Katman 5 (Oturum) | Katman 5 (Oturum) |
| DNS çözümlemesi | Uzak (proxy) | Yerel (istemci) | Uzak (proxy) |
| Hız | Web için yüksek | Orta | Orta |
| Anonimlik | Yüksek | Orta (DNS sızıntısı riski) | Mükemmel |
| GProxy desteği | Tam destek | Tam destek | Tam destek |
.curlrc yapılandırma dosyası
Aynı proxy bilgilerini defalarca yazdığınızı fark ediyorsanız, .curlrc dosyası en iyi dostunuzdur. Linux ve macOS'ta bu dosya ~/.curlrc konumundadır. Windows'ta ise genellikle %USERPROFILE% dizinindeki _curlrc dosyasıdır.
GProxy kimlik bilgilerinizi ve varsayılan ayarlarınızı buraya ekleyebilirsiniz:
# Tüm curl istekleri için varsayılan proxy ayarları
proxy = "http://username:[email protected]:8080"
user-agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
connect-timeout = 30
max-time = 60
Bu ayarlar kaydedildiğinde curl https://example.com komutu ek bir bayrak olmadan otomatik olarak GProxy sunucusunu kullanır. Tek bir istek için yapılandırmayı atlamanız gerekirse --noproxy "*" bayrağını kullanın.
Öne çıkanlar
curl proxy'lerinde ustalaşmak, gelişmiş veri toplama ve ağ testlerine olanak tanır. HTTP ve SOCKS protokolleri arasındaki nüansları anlayarak iş akışlarınızı hem hız hem de güvenlik açısından optimize edebilirsiniz.
- Gizlilik için SOCKS5h kullanın: DNS çözümlemesinin proxy sunucusunda yapılmasını ve ISP'nizin isteklerinizi izlememesini sağlamak için her zaman
socks5://yerinesocks5h://tercih edin. - Güvenlik için .curlrc'den yararlanın: parolaları kabuk geçmişine bırakmak yerine, kısıtlı dosya izinlerine sahip bir
.curlrcdosyasında saklayın (chmod 600 ~/.curlrc). - GProxy backconnect: GProxy kullanırken backconnect düğümlerinden yararlanın. IP'leri kodunuzda döndürmeniz gerekmez; bunu proxy ağ geçidi sizin için yapar ve scraping betiklerinizin karmaşıklığını ciddi biçimde azaltır.
- -v ile izleyin: bir istek başarısız olursa, sorunun proxy'de mi, hedef sunucuda mı yoksa yerel ağ yapılandırmanızda mı olduğunu belirlemek için elinizdeki en güçlü araç verbose bayrağıdır.
Bunları da okuyun
DIY Proxy Farm: How to Build and Configure
Proxy API Entegrasyonu: Geliştiriciler İçin Otomasyon
503 hatası ve proxy timeout: teşhis ve çözüm
Proxy ile 502 Bad Gateway hatası: nasıl düzeltilir
407 Proxy Authentication Required hatası: nedenleri ve çözümü
