cURL ile proxy kullanmak, proxy sunucusunun adresini ve portunu -x veya --proxy komut satırı seçeneğiyle belirtmek anlamına gelir; böylece cURL istekleri bir ara sunucu üzerinden yönlendirilir.
Bu makale, cURL'ün proxy servisleriyle çalışmak için sunduğu çeşitli yöntemleri ve komut satırı seçeneklerini ayrıntılı olarak ele alır: temel HTTP/HTTPS proxy'ler, kimlik doğrulamalı proxy'ler, SOCKS proxy'ler ve ortam değişkenleriyle yapılandırma.
Temel proxy yapılandırması
cURL'e bir proxy kullanmasını söylemenin en yaygın yolu, ardından proxy sunucusunun adresi ve portu gelen -x veya --proxy seçeneğidir.
HTTP/HTTPS proxy
Bir HTTP veya HTTPS isteğini HTTP/HTTPS proxy üzerinden yönlendirmek için proxy adresini ve portunu belirtin.
Söz dizimi:
curl -x [protocol://][user:password@]proxyhost[:port] [URL]
Örnekler:
-
HTTP hedefi için HTTP proxy kullanımı:
bash curl -x http://your.proxy.server:8080 http://example.com
Bu komut, cURL'ehttp://example.comisteğini HTTP proxy protokolüyleyour.proxy.serverüzerindeki8080portundan göndermesini söyler. -
HTTPS hedefi için HTTP proxy kullanımı:
bash curl -x http://your.proxy.server:8080 https://secure.example.com
Bir HTTPS hedefi HTTP proxy üzerinden geçirilirken cURL genellikle proxy üzerinden hedef sunucuya bir tünel kurmak içinCONNECTyöntemini kullanır. SSL/TLS el sıkışması bunun ardından doğrudan cURL ilesecure.example.comarasında gerçekleşir; şifrelemeye HTTP proxy dahil olmaz. -
HTTP hedefi için HTTPS proxy kullanımı:
bash curl -x https://your.secure.proxy.server:8443 http://example.com
Bu, isteği kendisi HTTPS kullanan bir proxy üzerinden yönlendirir. cURL ileyour.secure.proxy.serverarasındaki bağlantı şifrelenir.
Kimlik doğrulamalı proxy'ler
Birçok proxy servisi kimlik doğrulama ister. cURL, proxy'ler için başta Basic, NTLM ve Digest olmak üzere çeşitli kimlik doğrulama yöntemlerini destekler.
Basic kimlik doğrulama
Kullanıcı adı ve parola isteyen proxy'ler için --proxy-user seçeneğini kullanın ya da kimlik bilgilerini doğrudan proxy URL'sine gömün.
Söz dizimi:
curl -x [protocol://]proxyhost[:port] --proxy-user "username:password" [URL]
curl -x [protocol://]username:password@proxyhost[:port] [URL]
Örnekler:
-
--proxy-userkullanımı:
bash curl -x http://your.proxy.server:8080 --proxy-user "proxyuser:proxypass" http://example.com -
Kimlik bilgilerini URL'ye gömme:
bash curl -x http://proxyuser:[email protected]:8080 http://example.com
Kullanıcı adında veya parolada özel karakterler varsa bunların URL kodlaması yapılmalıdır. Örneğinp@sswordparolasıp%40sswordolmalıdır.
Diğer kimlik doğrulama yöntemleri
Basic kimlik doğrulama yaygın olsa da cURL, belirli ortamlar için başka yöntemleri de destekler.
--proxy-ntlm: proxy için NTLM kimlik doğrulamasını etkinleştirir.--proxy-digest: proxy için Digest kimlik doğrulamasını etkinleştirir.
Örnek (NTLM):
curl -x http://your.proxy.server:8080 --proxy-ntlm --proxy-user "DOMAIN\proxyuser:proxypass" http://example.com
SOCKS proxy'ler
SOCKS (Socket Secure) proxy'ler, HTTP proxy'lere göre daha alt bir seviyede çalışır ve çeşitli ağ protokollerini işler. cURL; SOCKS4, SOCKS4a ve SOCKS5'i destekler.
SOCKS5 proxy
SOCKS5, IPv4, IPv6, UDP ve kimlik doğrulamayı destekleyen, en çok yönlü SOCKS protokolüdür.
Söz dizimi:
curl --socks5 [user:password@]proxyhost[:port] [URL]
Örnekler:
-
Temel SOCKS5 proxy:
bash curl --socks5 your.socks5.server:1080 http://example.com
cURL varsayılan olarakexample.comalan adını yerel olarak çözer ve IP adresini SOCKS5 proxy'ye gönderir. -
Uzaktan DNS çözümlemeli SOCKS5 proxy:
bash curl --socks5-hostname your.socks5.server:1080 http://example.com
--socks5-hostnameseçeneği cURL'eexample.comalan adını SOCKS5 proxy'ye göndermesini söyler; böylece DNS çözümlemesini proxy yapar. Yerel DNS çözümlemesinin konumunuzu ele verebildiği durumlarda bu, anonimlik ve coğrafi kısıtlamaları aşmak için kritiktir. -
Kimlik doğrulamalı SOCKS5 proxy:
bash curl --socks5-hostname socksuser:[email protected]:1080 http://example.com
SOCKS4/SOCKS4a proxy
SOCKS4, esas olarak IPv4'e yönelik eski bir protokoldür ve kimlik doğrulamayı desteklemez. SOCKS4a, proxy'nin alan adlarını çözebilmesi için SOCKS4'ü genişletir.
Söz dizimi:
curl --socks4 proxyhost[:port] [URL]
curl --socks4a proxyhost[:port] [URL]
Örnek (SOCKS4a):
curl --socks4a your.socks4.server:1080 http://example.com
--socks5-hostname seçeneğine benzer biçimde --socks4a, hedef alan adının proxy tarafından çözülmesini sağlar.
SSL/TLS ile HTTPS hedeflerinin proxy'lenmesi
cURL bir HTTPS isteğini HTTP proxy üzerinden geçirdiğinde, proxy'ye bir CONNECT isteği başlatır. Proxy daha sonra hedef HTTPS sunucusuna bir TCP tüneli kurar. cURL, SSL/TLS el sıkışmasını bu tünel üzerinden doğrudan hedef sunucuyla yapar.
SSL sertifika doğrulaması
cURL varsayılan olarak hedef sunucunun SSL sertifikasını doğrular. Sertifika geçersiz, süresi dolmuş veya kendinden imzalıysa cURL bağlantıyı sonlandırır.
-
--insecureveya-k: SSL sertifika doğrulamasını kapatır. Dikkatli kullanın; esas olarak test ortamları veya kendinden imzalı sertifika kullanan, güvenilirliği bilinen ortamlar içindir.
bash curl -x http://your.proxy.server:8080 https://self-signed.example.com -k -
--cacert [file]: doğrulama için özel bir CA sertifika paketi belirtir.
bash curl -x http://your.proxy.server:8080 https://secure.example.com --cacert /path/to/custom_ca.pem
Proxy yapılandırması için ortam değişkenleri
cURL, proxy ayarlarını ortam değişkenlerinden de alabilir. Bu, her komutta -x seçeneğini belirtmeden sistem geneli veya oturum geneli proxy yapılandırması için kullanışlıdır.
Yaygın ortam değişkenleri
http_proxy: HTTP istekleri için proxy.https_proxy: HTTPS istekleri için proxy.all_proxy:http_proxyveyahttps_proxytanımlı değilse tüm protokoller için yedek proxy.no_proxy: proxy'yi atlaması gereken alan adlarının, alanların veya IP adreslerinin virgülle ayrılmış listesi.
Söz dizimi:
export http_proxy="http://your.proxy.server:8080"
export https_proxy="http://your.proxy.server:8080" # Not: HTTPS hedefleri için genellikle bir HTTP proxy kullanılır
export no_proxy="localhost,127.0.0.1,.localdomain"
Örnekler:
-
HTTP proxy tanımlama:
bash export http_proxy="http://proxyuser:[email protected]:8080" curl http://example.com -
HTTPS proxy tanımlama (HTTP proxy üzerinden):
bash export https_proxy="http://your.proxy.server:8080" curl https://secure.example.com -
Belirli hostlar için proxy'yi atlama:
bash export http_proxy="http://your.proxy.server:8080" export no_proxy="internal.example.com" curl http://internal.example.com # Bu istek proxy'yi atlayacak curl http://external.example.com # Bu istek proxy'yi kullanacak
Öncelik
Komut satırı seçenekleri, ortam değişkenlerine göre önceliklidir. -x belirtilmişse, http_proxy, https_proxy veya all_proxy ortam değişkenlerinin tümünü geçersiz kılar.
Proxy bağlantılarında sorun giderme
cURL ve proxy'lerle ilgili sorunlarda tanı koymaya yardımcı olan birkaç seçenek vardır.
-
--verboseveya-v: proxy bağlantı denemeleri, başlıklar ve SSL/TLS anlaşması dahil olmak üzere istek ve yanıt hakkında ayrıntılı bilgi verir. Genellikle hata ayıklamanın ilk adımıdır.
bash curl -v -x http://your.proxy.server:8080 http://example.com -
--trace [file]: başlıklar ve gövde dahil, gelen ve giden tüm verilerin tam izini belirtilen dosyaya döker.
bash curl --trace debug.log -x http://your.proxy.server:8080 http://example.com -
Proxy sunucu logları: cURL isteklerinizle ilgili bağlantı denemeleri, kimlik doğrulama hataları veya hata mesajları için proxy sunucunuzun loglarını inceleyin.
-
Ağ erişilebilirliği: cURL'ü çalıştıran makinenin proxy sunucusuna belirtilen porttan erişebildiğini
ping,telnetveyanetcatgibi araçlarla doğrulayın.
bash telnet your.proxy.server 8080
Başarılı birtelnetbağlantısı, temel ağ erişilebilirliğini gösterir.
Temel proxy seçeneklerinin karşılaştırması
| cURL seçeneği | Açıklama | Protokoller | Kimlik doğrulama | DNS çözümleme |
|---|---|---|---|---|
-x, --proxy |
Genel proxy tanımı (HTTP/HTTPS proxy) | HTTP, HTTPS | Var | Yerel |
--proxy-user |
Proxy kimlik doğrulaması için kullanıcı adı ve parola belirtir | HTTP, HTTPS | Var | Yok |
--socks5 |
SOCKS5 proxy, varsayılan olarak yerel DNS çözümleme | Tümü | Var | Yerel |
--socks5-hostname |
SOCKS5 proxy, uzaktan DNS çözümleme | Tümü | Var | Uzak (proxy) |
--socks4 |
SOCKS4 proxy, yerel DNS çözümleme | Tümü | Yok | Yerel |
--socks4a |
SOCKS4a proxy, uzaktan DNS çözümleme | Tümü | Yok | Uzak (proxy) |
http_proxy (env) |
HTTP proxy için ortam değişkeni | HTTP | Var | Yerel |
https_proxy (env) |
HTTPS proxy için ortam değişkeni (tünelleme için genellikle bir HTTP proxy) | HTTPS | Var | Yerel |
all_proxy (env) |
Diğerleri tanımlı değilse tüm protokoller için ortam değişkeni | Tümü | Var | Yerel |
no_proxy (env) |
Proxy'yi atlaması gereken hostları belirten ortam değişkeni | Yok | Yok | Yok |
