WeProxy

Rehber

cURL ile Proxy Kullanımı: HTTP, HTTPS ve SOCKS5 Komut Örnekleri

10 dk okuma

cURL’de proxy -x parametresiyle tanımlanır, kimlik bilgisi URL’de ya da -U ile verilir. HTTP proxy üzerinden HTTPS isteği, socks5 ve socks5h farkı, ortam değişkenleri ve .curlrc, çıkış IP’si ve süre ölçümü, Windows komutları ve sık cURL proxy hataları.

Kısa cevap

  • cURL’de proxy -x (--proxy) parametresiyle verilir: curl -x "http://USER:[email protected]:8989" https://api.ipify.org; kimlik bilgisi URL içinde ya da -U "USER:PASSWORD" ile ayrı yazılabilir.
  • Hedef site HTTPS olsa da HTTP proxy adresi http:// ile yazılır; cURL proxy’ye CONNECT gönderir ve TLS tünelin içinde kurulur. https:// şeması proxy sunucusuyla da TLS konuşmak demektir.
  • SOCKS5 için socks5:// alan adını yerelde, socks5h:// proxy tarafında çözer; DNS sorgularının yerel ağdan çıkmaması için socks5h:// ya da --socks5-hostname kullanılır.
  • cURL HTTP için yalnız küçük harfli http_proxy değişkenini okur; HTTPS_PROXY, ALL_PROXY ve NO_PROXY de desteklenir. Komut satırındaki -x ortam değişkenini ezer.
  • Windows PowerShell 5.1’de curl, Invoke-WebRequest takma adıdır; proxy komutlarında curl.exe yazılır ve cmd.exe’de adres çift tırnakla verilir.

cURL’de proxy kullanmak için isteğe -x (uzun adı --proxy) parametresini ve proxy adresini eklersiniz: curl -x "http://USER:[email protected]:8989" https://api.ipify.org. HTTP proxy için adres http://, SOCKS5 proxy için socks5h:// şemasıyla yazılır; hedef sitenin HTTPS olması proxy adresini değiştirmez.

Aynı komut Linux, macOS ve Windows’ta çalışır. Sonuçta dönen IP adresi proxy’nin çıkış IP’siyse bağlantı, kimlik doğrulama ve tünel doğru kurulmuş demektir. Örneklerde WeProxy gateway adresi gw.weproxy.com.tr:8989 kullanılıyor; USER ve PASSWORD müşteri panelindeki bilgilerinizdir.

cURL’de proxy nasıl tanımlanır? -x ve -U parametreleri

-x parametresi proxy adresini [şema://][kullanıcı:parola@]host[:port] biçiminde alır. Kimlik bilgisini adresin içine yazabilir ya da -U (--proxy-user) ile ayrı verebilirsiniz:

curl -x "http://USER:[email protected]:8989" https://api.ipify.org
curl -x "http://gw.weproxy.com.tr:8989" -U "USER:PASSWORD" https://api.ipify.org

İki komut aynı isteği gönderir. Fark, parolada özel karakter olduğunda ortaya çıkar. URL içinde @, :, # veya % geçen bir parolanın yüzde kodlamasıyla yazılması gerekir (@ → %40). -U ise değeri ilk : karakterinden böler; kullanıcı adında : olmadığı sürece parolayı kodlamadan, olduğu gibi yazabilirsiniz. Kodlama kuralları ve diğer satır biçimleri proxy formatları rehberinde anlatılıyor.

cURL belgelerine göre -x değerinde şema yoksa adres HTTP proxy sayılır, port yazılmazsa 1080 kullanılır. WeProxy gateway’i farklı bir portta dinlediği için portu her komutta açıkça yazın. Proxy IP whitelist ile yetkilendiriliyorsa kimlik bilgisine gerek kalmaz: curl -x "http://gw.weproxy.com.tr:8989" https://api.ipify.org yeterlidir. Hangi WeProxy ürününde hangi yöntemin desteklendiğini proxy kimlik doğrulama rehberi ürün bazında listeliyor.

Komut satırına yazılan parola kabuk geçmişine ve sistemdeki süreç listesine düşebilir. Paylaşılan sunucularda parolayı bir ortam değişkeninden okuyun:

export PROXY_PASS='PASSWORD'
curl -x "http://gw.weproxy.com.tr:8989" -U "USER:$PROXY_PASS" https://api.ipify.org

cURL ile HTTP proxy üzerinden HTTPS isteği nasıl gönderilir?

HTTPS bir siteye HTTP proxy üzerinden giderken proxy adresi yine http:// ile yazılır. cURL proxy’ye önce CONNECT api.ipify.org:443 isteği gönderir. Proxy 200 dönerse TLS bağlantısı bu tünelin içinde, doğrudan hedef siteyle kurulur. Proxy, hedefin sertifikasını ve sayfa içeriğini görmez; yalnız hangi host ve porta bağlandığınızı bilir.

Hedef http:// ile başlıyorsa cURL tünel açmaz. İsteği tam URL’yle proxy’ye gönderir ve proxy hedefe kendisi gider. Düz HTTP isteğini de tünelden geçirmek isterseniz -p (--proxytunnel) ekleyin:

curl -p -x "http://USER:[email protected]:8989" http://example.com

Neyin gönderildiğini görmek için -v kullanın. > ile başlayan satırlar giden, < ile başlayanlar gelen verilerdir. Kısaltılmış bir örnek (ayrıntılar cURL sürümüne göre değişir):

> CONNECT api.ipify.org:443 HTTP/1.1
> Proxy-Authorization: Basic ...
< HTTP/1.1 200 Connection established
* CONNECT tunnel established, response 200
> GET / HTTP/2
< HTTP/2 200

İlk < satırı proxy’nin, sonraki < satırları hedef sitenin cevabıdır. CONNECT yanıtı 407 ise sorun kimlik bilgisindedir. Tünel 200 ile kurulup hedef 403 veya 429 dönüyorsa proxy çalışıyor, ret hedef siteden geliyor demektir.

Proxy adresini https:// ile yazmak, cURL’ün proxy sunucusuyla da TLS konuşması anlamına gelir (HTTPS proxy). Proxy bunu sunmuyorsa el sıkışma başarısız olur ve curl: (35) alırsınız. Proxy’ye özel bir başlık göndermeniz gerekirse -H yerine --proxy-header kullanın; -H başlığı hedef siteye gider.

cURL ile SOCKS5 proxy nasıl kullanılır? socks5 ve socks5h farkı

SOCKS5 için yalnız şema değişir. cURL iki şemayı tanır:

curl -x "socks5://USER:[email protected]:8989" https://api.ipify.org
curl -x "socks5h://USER:[email protected]:8989" https://api.ipify.org

socks5:// hedef alan adını kendi bilgisayarınızda çözer ve proxy’ye IP adresini gönderir. socks5h:// alan adını olduğu gibi proxy’ye iletir; DNS çözümü proxy tarafında yapılır. İkinci şemada DNS sorgularınız yerel ağdan çıkmaz ve hedef, proxy’nin bulunduğu ülkeye göre çözülür. Coğrafi içerik görüyorsanız ya da DNS sızıntısını kapatmak istiyorsanız socks5h:// kullanın. Sızıntının nasıl ölçüldüğü DNS sızıntısı rehberinde anlatılıyor.

Eski komutlarda aynı işi yapan ayrı parametreler görürsünüz: --socks5 yerel çözümlü socks5://, --socks5-hostname ise socks5h:// ile aynıdır. Bu parametrelerle kimlik bilgisini -U ile verin:

curl --socks5-hostname "gw.weproxy.com.tr:8989" -U "USER:PASSWORD" https://api.ipify.org

WeProxy ürünlerinin çoğu HTTP ve SOCKS5’i birlikte sunar. Mobil proxy uç noktaları yalnız HTTP destekler; bu ürünü socks5:// ile yazdığınızda bağlantı kurulamaz. Hangi protokolün hangi işe uyduğunu HTTP vs SOCKS5 yazısı karşılaştırıyor.

cURL proxy parametreleri karşılaştırması

ParametreNe yaparÖrnek
-x, --proxyProxy adresini ve protokolünü verir-x "http://gw.weproxy.com.tr:8989"
-U, --proxy-userProxy kullanıcı adı ve parolası-U "USER:PASSWORD"
-p, --proxytunnelDüz HTTP isteğini de CONNECT tüneliyle gönderir-p -x ... http://example.com
--socks5-hostnameSOCKS5, DNS proxy’de (socks5h:// ile aynı)--socks5-hostname gw.weproxy.com.tr:8989
--socks5SOCKS5, DNS yerelde (socks5:// ile aynı)--socks5 gw.weproxy.com.tr:8989
--proxy-headerYalnız proxy’ye gönderilen başlık--proxy-header "X-Test: 1"
--noproxyProxy’siz gidecek hostlar--noproxy "localhost,127.0.0.1"
--connect-timeoutBağlantı kurma süresi sınırı (saniye)--connect-timeout 10
-m, --max-timeTüm işlem için süre sınırı (saniye)-m 30

Bir komutta hem -x hem --socks5 verirseniz sonuncusu geçerli olur. Karışıklığı önlemek için tek bir yöntem seçin; -x ve şemalı URL, betiklerde en okunaklı olanıdır.

Ortam değişkenleri ve .curlrc ile kalıcı proxy ayarı

Her komuta -x yazmak istemiyorsanız cURL’ün okuduğu ortam değişkenlerini tanımlayın:

export http_proxy="http://USER:[email protected]:8989"
export HTTPS_PROXY="http://USER:[email protected]:8989"
export NO_PROXY="localhost,127.0.0.1"
curl https://api.ipify.org

cURL, HTTP istekleri için yalnız küçük harfli http_proxy değişkenini okur; büyük harfli HTTP_PROXY güvenlik nedeniyle yok sayılır. HTTPS için HTTPS_PROXY ya da https_proxy, tüm protokoller için ALL_PROXY kullanılabilir. NO_PROXY listesindeki hostlar proxy’siz gider. Komut satırındaki -x ortam değişkenini ezer; --noproxy "*" ise o istek için proxy’yi tamamen kapatır.

Aynı ayar kullanıcı başına yapılandırma dosyasına da yazılabilir. Linux ve macOS’ta ~/.curlrc:

proxy = "http://gw.weproxy.com.tr:8989"
proxy-user = "USER:PASSWORD"

Windows’ta dosya kullanıcı klasöründe (%USERPROFILE% veya %APPDATA%) .curlrc ya da _curlrc adıyla aranır. -q parametresini komutun ilk argümanı olarak verirseniz cURL bu dosyayı okumaz. Bir betiğin beklenmedik şekilde proxy’den çıktığını görüyorsanız önce ortam değişkenlerine ve .curlrc dosyasına bakın.

Proxy çıkış IP’si cURL ile nasıl doğrulanır?

En kısa test, IP adresinizi düz metin olarak dönen bir servise proxy üzerinden istek atmaktır:

curl -s -x "http://USER:[email protected]:8989" "https://api.ipify.org?format=json"

Dönen adres kendi IP’nizse istek proxy’den geçmemiştir. Bu durumda NO_PROXY değerine, -x adresine ve komutun gerçekten çalıştırılan satır olup olmadığına bakın. IP’nin ülkesini, şehrini ve ağını görmek için adresi IP lookup aracına yapıştırın; tarayıcınızın proxy’li çıkışını My IP gösterir.

Rotating bir gateway’in nasıl döndüğünü test etmek için aynı komutu art arda çalıştırın. Her curl çağrısı yeni bir bağlantı açtığından, istek başına dönen bir havuzda her satırda farklı IP görürsünüz:

for i in 1 2 3 4 5; do
  curl -s -x "http://USER:[email protected]:8989" https://api.ipify.org
  echo
done

Elinizde panelden aldığınız host:port:user:pass biçiminde bir liste varsa, her satırı tek tek deneyen kısa bir Bash döngüsü hangi proxy’nin çalıştığını gösterir:

while IFS=: read -r host port user pass; do
  printf '%s:%s -> ' "$host" "$port"
  curl -s -m 15 -x "http://$host:$port" -U "$user:$pass" https://api.ipify.org || printf 'HATA'
  echo
done < proxies.txt

read son değişkene satırın geri kalanını verir; parolada : geçse bile pass içinde bütün kalır. -U kullanıldığı için parolayı yüzde kodlamanız da gerekmez. -m 15 yanıt vermeyen bir satırın döngüyü kilitlemesini önler.

Aynı IP’yi bir süre korumanız gerekiyorsa (login, sepet, çok adımlı form) WeProxy residential ve mobil havuzlarında kullanıcı adına bir session kimliği eklenir. Residential havuzda 24 saate, mobil havuzda 60 dakikaya kadar aynı çıkış IP’si sabitlenebilir. Kullanıcı adının tam biçimi ürüne göre değiştiği için onu panelden kopyalayın ve yukarıdaki döngüde aynı IP’nin döndüğünü kontrol edin. Hangi işin sabit, hangisinin dönen IP istediğini sticky ve rotating proxy rehberi senaryo bazında anlatıyor.

Bağlantının hangi aşamada zaman kaybettiğini görmek için -w ile zaman ölçümlerini yazdırın:

curl -s -o /dev/null -x "http://USER:[email protected]:8989" \
  -w "connect=%{http_connect} http=%{http_code} tcp=%{time_connect}s tls=%{time_appconnect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n" \
  https://api.ipify.org

%{http_connect} proxy’nin CONNECT yanıtını, %{http_code} hedef sitenin yanıtını verir. time_connect proxy’ye TCP bağlantısının, time_appconnect hedefle TLS el sıkışmasının bittiği andır. Toplam süre yüksek ama time_connect düşükse proxy’ye hızlı ulaşıyorsunuz; gecikme tünelin ötesinde ya da hedef sitededir. Tek satırı koddan bağımsız test etmek için proxy checker aracını da kullanabilirsiniz.

Windows’ta cURL ile proxy kullanımı

Windows 10 ve 11’de curl.exe sistemle birlikte gelir. Windows PowerShell 5.1’de curl yazmak ise cURL’ü değil, farklı parametreler alan Invoke-WebRequest komutunu çalıştırır. PowerShell’de her zaman curl.exe yazın:

curl.exe -x "http://USER:[email protected]:8989" https://api.ipify.org

Komut İstemi’nde (cmd.exe) tek tırnak, tırnak işareti sayılmaz. Adresi çift tırnakla yazın. Satır devam karakteri Bash’teki \ değil, cmd.exe’de ^, PowerShell’de ise ters tırnaktır. Ortam değişkeni de kabuğa göre farklı tanımlanır:

# PowerShell
$env:HTTPS_PROXY = "http://USER:[email protected]:8989"
curl.exe https://api.ipify.org
:: cmd.exe
set HTTPS_PROXY=http://USER:[email protected]:8989
curl https://api.ipify.org

cmd.exe’de parolada %, ^ veya & varsa bu karakterler kabuk tarafından yorumlanır. Böyle bir parolayı -U ile ve çift tırnak içinde verin ya da yüzde kodlamasıyla URL’ye yazın. Windows’un sistem proxy ayarını cURL okumaz; sistem genelinde kurulum için Windows entegrasyonu sayfasına bakın.

cURL proxy hataları ve çözümleri

cURL hata verdiğinde satırın başındaki sayı (çıkış kodu) sorunun hangi aşamada olduğunu gösterir:

HataAnlamıÇözüm
curl: (5) Could not resolve proxyProxy host adı çözülemediGateway adını ve yerel DNS’i kontrol edin
curl: (7) Failed to connectProxy portuna ulaşılamadıPortu açıkça yazın, güvenlik duvarına bakın
curl: (56) CONNECT tunnel failed, response 407Proxy kimlik bilgisini kabul etmediKullanıcı adı, parola ve yüzde kodlamasını kontrol edin
curl: (35) TLS hatasıProxy https:// ile yazıldı ya da tünel kurulamadıProxy şemasını http:// yapın
curl: (97)SOCKS el sıkışması başarısızÜrünün SOCKS5 desteğini ve kimlik bilgisini kontrol edin
curl: (28)Zaman aşımı--connect-timeout ile -m sürelerini ayırın, tekrar deneyin
Kendi IP’niz dönüyorİstek proxy’ye gitmediNO_PROXY, .curlrc ve -x değerini kontrol edin

Geçici ağ hatalarında --retry 3 --retry-delay 2 ekleyerek isteği otomatik yeniden deneyebilirsiniz. --retry yalnız geçici kabul edilen hatalarda devreye girer; 407 gibi kalıcı bir hatayı tekrar denemek sonucu değiştirmez. Durum kodlarının hangi katmandan geldiğini ve her biri için ilk bakılacak yeri proxy hata kodları rehberi ayrıntılı anlatıyor. Aynı istekleri kodla göndermeye geçtiğinizde Python ile proxy kullanımı yazısındaki örnekler aynı adres biçimini kullanır.

cURL ile toplu istek gönderirken hedef sitenin kullanım şartlarına ve robots.txt dosyasına uyun; kişisel veri topluyorsanız KVKK ve GDPR yükümlülükleri geçerlidir. WeProxy hizmetlerinde izin verilen kullanımlar kabul edilebilir kullanım sayfasında yazılıdır. Her istekte yeni IP için rotating residential proxy, sabit bir çıkış adresi için statik datacenter IPv4 sayfalarındaki paketlere bakabilirsiniz.

Sık sorulan sorular

cURL’de proxy nasıl ayarlanır?

İsteğe -x parametresiyle proxy adresini ekleyin: curl -x "http://USER:[email protected]:8989" https://api.ipify.org. Kimlik bilgisini ayrı vermek isterseniz -x "http://gw.weproxy.com.tr:8989" -U "USER:PASSWORD" yazın. Şema yazılmazsa cURL adresi HTTP proxy sayar, port yazılmazsa 1080 kullanır; bu yüzden portu her zaman açıkça belirtin. Dönen IP proxy çıkışıysa ayar doğrudur.

HTTPS siteler için proxy adresi https:// ile mi yazılır?

Hayır, çoğu durumda http:// ile yazılır. Şema proxy sunucusunun protokolünü anlatır, hedef sitenin değil. cURL HTTPS hedefler için proxy’ye CONNECT isteği gönderir ve TLS bağlantısını bu tünelin içinde hedefle kurar. Proxy adresini https:// ile yazmak, cURL’ün proxy’nin kendisiyle de TLS konuşacağı anlamına gelir; proxy bunu sunmuyorsa curl: (35) hatası alırsınız.

cURL’de socks5 ile socks5h arasındaki fark nedir?

İkisi de aynı SOCKS5 proxy’ye bağlanır; fark DNS çözümündedir. socks5:// ya da --socks5 hedef alan adını kendi bilgisayarınızda çözer ve proxy’ye IP adresini gönderir. socks5h:// ya da --socks5-hostname alan adını proxy’ye iletir, çözüm proxy tarafında yapılır. İkinci yöntem DNS sorgularının yerel ağdan çıkmasını önler ve hedefin proxy konumuna göre çözülmesini sağlar.

cURL’de 407 hatası neden alınır?

curl: (56) CONNECT tunnel failed, response 407 mesajı, proxy’nin kimlik bilgisini kabul etmediğini gösterir. Kullanıcı adı ve parolayı panelden yeniden kopyalayın. Parolada @, : veya % gibi karakterler varsa URL içinde yüzde kodlamasıyla yazın ya da kimlik bilgisini -U "USER:PASSWORD" ile ayrı verin. IP whitelist kullanıyorsanız isteğin çıktığı IP’nin panelde kayıtlı olduğunu kontrol edin.

Proxy’yi her cURL komutuna yazmadan nasıl kullanırım?

Ortam değişkeni tanımlayın: Linux ve macOS’ta export HTTPS_PROXY="http://USER:[email protected]:8989", PowerShell’de $env:HTTPS_PROXY. HTTP istekleri için küçük harfli http_proxy gerekir. Kalıcı ayar için ~/.curlrc dosyasına proxy ve proxy-user satırlarını ekleyebilirsiniz. Belirli hostları dışarıda bırakmak için NO_PROXY, tek bir istekte proxy’yi kapatmak için --noproxy "*" kullanılır.

Başlayın

Proxy Altyapınızı Bugün Test Edin

Ücretsiz araçlarla bağlantınızı kontrol edin veya size uygun paketi seçmek için satış ekibiyle konuşun.