İçeriğe geç

curl için proxy yapılandırması: komut satırında HTTP ve SOCKS

Гайды
curl için proxy yapılandırması: komut satırında HTTP ve SOCKS

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.

curl için proxy yapılandırması: komut satırında HTTP ve SOCKS

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
curl için proxy yapılandırması: komut satırında HTTP ve SOCKS

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:// yerine socks5h:// 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 .curlrc dosyası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.
support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.