curl proxy kurulumu: kimlik doğrulama, HTTPS CONNECT ve güvenilir kontroller

11 dk

Açık bir curl proxy ayarlayın, -U'yu -u'dan ayırın, HTTPS'i -k olmadan CONNECT üzerinden gönderin ve çıkış kodlarını gerçekten kullandığınız yola göre okuyun.

PATH'te zaten curl olan ve kanıtlayabileceği bir HTTP veya SOCKS hop'u gerekenler için bu rehber. Aşağıdaki kontroller satıcı hesabı değil, yerel bir loopback origin ve sahte proxyler kullandı. Top Proxy IP satmaz; burada ücretsiz anahtar da yok. Tarayıcıdaki IP adresim sayfası tarayıcı yolunu gösterir, bu curl sürecini değil.

01Kontrolleri yaşayan bir proxy üzerinde çalıştırın

Bu yazıdaki sayılar, curl 8.7.1 üzerinde kontrollü bir loopback ölçümünden geldi. O ölçüm yöntemdir. Bu sayfada indirilecek bir paket yoktur ve herkese açık indirme de yoktur.

Hâlâ çalışan bir proxy ve origin'e karşı sıradan curl kullanın. Sahte lab-user:lab-pass bir etikettir, hesap değildir. Komuta canlı ana bilgisayarınızı, portunuzu ve CA'nızı koyun. Kayıtlı geçişteki 60585 ailesi portları yeniden kullanmayın. Ölçüm bitince o uçlar gitmişti.

curl -q -sS --noproxy '' -x http://127.0.0.1:PROXY_PORT --proxy-user lab-user:lab-pass http://127.0.0.1:ORIGIN_PORT/identity

Aynı HTTP hop üzerinden HTTPS yine CONNECT kullanır. Şu an konuştuğunuz origin'e uyan CA'ya güvenin.

curl -q -sS --noproxy '' -x http://127.0.0.1:PROXY_PORT --proxy-user lab-user:lab-pass --cacert ca.pem https://localhost:ORIGIN_HTTPS_PORT/identity

02Açık bir HTTP proxy ayarlayın ve yolu doğrulayın

curl'ü ilk seçenek olarak -q ile başlatın. Kurulu 8.7.1 man curl ve curl man sayfası ikisi de ilk konumdaki -q'nun curlrc'yi atladığını söyler. Çevrimiçi kılavuzlar daha yeni bayrakları anlatabilir. Bu anlatım 8.7.1'de kalır. rc dosyanız bir proxy, bir CA paketi veya --user enjekte ediyorsa sonraki her bayrak bir hayaletle tartışır. Dosyayı gizlemek için HOME'u yeniden yazmayın. -q, ikilinin zaten verdiği yalıtımdır.

Hop'u -x / --proxy ile gösterin. Şema yoksa curl ana bilgisayarı HTTP proxy sayar. everything curl'deki HTTP proxyler HTTP hedefler için absolute-form iletmeyi anlatır. Laboratuvarın alpha proxy'si GET http://127.0.0.1:60585/identity kaydetti, sonra origin JSON'unu döndürdü. Tek başına durum 200 yol değildir. Origin via_proxy_header: alpha yansıttı. beta adlı ikinci, günlüğe yazan proxy o çağrıda boş durdu.

  1. curl -q --version çalıştırın ve libcurl satırını saklayın. Bu anlatım curl 8.7.1, libcurl 8.7.1, SecureTransport artı LibreSSL 3.3.6 kullandı. Özelliklerde HTTPS-proxy vardı. O bayrak, bir proxy'ye TLS hakkındadır. SOCKS kanıtlamaz, CONNECT de kanıtlamaz.
  2. Origin'i bir kez -x olmadan çağırın. Doğrudan HTTP çıkış 0, HTTP 200, origin kimliği http-origin döndürdü ve sahte proxy hiçbir şey almadı. Bu kontroldür.
  3. Aynı URL'yi -x, --noproxy '' ve sahte --proxy-user ile çağırın. --noproxy '', kabuk NO_PROXY loopback'i atlayacak olsa bile proxy'yi zorlar. Origin gövdesi alpha dedi. Hop Proxy-Authorization tüketti. Origin onu görmedi.
  4. Yalnızca stdout değil, proxy günlüğünü okuyun. Bu düzenekte eksik kimlik bilgileri, --fail kapalı olduğu için HTTP 407 ve curl çıkış 0 döndürdü.
curl -q -sS --noproxy '' -x http://127.0.0.1:PROXY_PORT --proxy-user lab-user:lab-pass http://127.0.0.1:ORIGIN_PORT/identity

PROXY_PORT ve ORIGIN_PORT hâlâ ayakta olan bir düzenekten gelmelidir. Kayıtlı sonuçlardaki süresi dolmuş portlar değildir.

Yürütülen açık HTTP proxy kontrolü, alpha üzerinden çıkış 0 ve HTTP 200

Yanlış sahte kimlik bilgileri de 407 ve çıkış 0 döndürdü. Düzenek auth: wrong işaretledi. Doğru kimlik bilgileri origin 200 ve auth: correct döndürdü. Sahte paroladaki ayrılmış karakterler yapıştırılmış bir URL'den değil, --proxy-user üzerinden gitti. Bileşen bazında URL kodlama diğer yasal yoldur. Kaçınabiliyorsanız gerçek parolaları argv'ye koymayın. Süreç listeleri argümanı bir an yine görür. 8.7.1 kılavuzu bunu söyler.

Bir ana bilgisayarın HTTP'ye yanıt verip vermediğini bilmek yeterse proxy kontrolü kullanın. Bir erişilebilirlik aracıdır. Bu curl süreci değildir.

03Proxy kimlik doğrulamasını origin kimlik doğrulamasından ayrı tutun

-U / --proxy-user proxy'ye kimlik doğrular. -u / --user origin'e kimlik doğrular. everything curl'de proxy kimlik doğrulama bunları bilinçli olarak bağımsız tutar. Karıştırmak, geçit parolasını uygulama girişine sızdırmanın veya tersinin yoludur.

Laboratuvar origin'i /origin-auth yolunu kendi Basic meydan okumasıyla sundu. Bir komut dummy -U'yu alpha'ya, dummy -u'yu origin'e gönderdi. Origin JSON'u origin_authorized: true ve proxy_authorization_present: false dedi. Hop Proxy-Authorization tüketti. Origin onu hiç görmedi.

  1. Proxy kimlik bilgilerini -U'ya veya proxy URL userinfo'suna koyun, asla -u'ya değil.
  2. Origin kimlik bilgilerini -u'ya, gerçekten istediğiniz bir netrc'ye veya origin URL'sine koyun. Bu laboratuvar boş özel bir netrc ve --netrc kullanmadı; sürpriz bir giriş hata olurdu.
  3. Origin'i doğrulayın. Proxy'den 200, origin'den 401, hop'tan 407'den farklı bir başarısızlıktır.
curl -q -sS --noproxy '' -x http://127.0.0.1:PROXY_PORT --proxy-user lab-user:lab-pass -u origin-user:origin-pass http://127.0.0.1:ORIGIN_PORT/origin-auth
Yürütülen -U proxy kimliği yanında -u origin kimliği; origin, proxy başlığı sızıntısı olmadan yetkilendi

--fail olmadan HTTP 407, bu yapıda curl'ü çıkış 0'da bıraktı. Aynı eksik kimlik bilgisi çağrısına -f eklemek HTTP 407 ve çıkış 22 döndürdü. Kurulu kılavuz, 401 ve 407'nin --fail'den sızabileceğini uyarır. Bu çalışmada 8.7.1'de sızmadılar. Bunu her gelecek curl'e genellemeyin. Durumu, CONNECT durumunu ve çıkışı ayrı kaydedin. --fail-with-body, belgeyi yine yazan kardeştir. Burada varsayılan değildi.

Bu yazıdaki dummy kullanıcılar etikettir. Hesap değildir. Laboratuvardaki ayrıntılı izlerde Authorization ve Proxy-Authorization değerleri diske herhangi bir dosya düşmeden önce [REDACTED] olarak silindi.

04TLS'i kapatmadan CONNECT üzerinden HTTPS'e ulaşın

HTTP proxy önündeki bir HTTPS sitesi yine HTTP proxy'dir. curl CONNECT host:port gönderir, proxy TCP açar, sonra TLS o tünelden origin'e koşar. Bunun için https:// proxy şemasına ihtiyacınız yoktur. https:// proxy şeması, proxy'nin kendisine TLS'dir. everything curl HTTP proxyler ve HTTPS proxy bölümü bu hop'ları ayırır. Bu laboratuvar bir HTTPS proxy ayağa kaldırmadı. --proxy-cacert ölçülmedi. --cacert CONNECT sonrası origin'i doğruladı.

  1. URL https://localhost:PORT/identity olsa bile -x'i http://127.0.0.1:PORT üzerinde tutun.
  2. Laboratuvar CA'sına --cacert ile güvenin. -k eklemeyin.
  3. 200'e güvenmeden önce bir CONNECT günlük satırı isteyin. Alpha CONNECT localhost:60586 kaydetti, auth: correct ve durum 200 ile, sonra origin gövdesi https-origin dedi.
  4. --cacert olmadan bir kez tekrarlayın. CONNECT yine başarılı oldu. curl sonra çıkış 60 verdi, TLS eş sertifika hatası. Tünel sağlamdı. Sertifika değildi.
curl -q -sS --noproxy '' -x http://127.0.0.1:PROXY_PORT --proxy-user lab-user:lab-pass --cacert ca.pem https://localhost:ORIGIN_HTTPS_PORT/identity

--cacert, hâlâ çalışan bir düzenekten gelen CA olmalıdır. Tek atımlık başlatıcı çıktıktan sonra artakalan evidence/ca.pem'e işaret etmeyin ve kayıtlı çalıştırmadaki silinmiş geçici yolu yeniden kullanmayın.

Güvenilen laboratuvar CA'sıyla HTTP proxy üzerinden yürütülen HTTPS CONNECT

CONNECT'te eksik proxy kimlik bilgileri, HTTP 407 artı çıkış 0 yoluna benzemedi. Düzenek CONNECT'te yine 407 yanıtladı. curl 8.7.1 çıkış 56 verdi ve write-out HTTP kodu 000 oldu. Yanlış kimlik bilgileri aynı şeyi yaptı. CONNECT başarısızlıklarını taşıma sayın; sonra ayrıştırabileceğiniz sessiz bir HTML 407 değil.

Laboratuvar CA'sıyla doğrudan HTTPS 200 döndürdü. O olmadan doğrudan HTTPS çıkış 60 döndürdü. Bu çift TLS taban çizgisidir. Proxy'den bağımsızdır.

Tarayıcıdaki bir IP adresim sekmesi bu tüneli yine göstermez. Tarayıcı istiyorsanız tarayıcıyı yapılandırırdınız.

05Ortam proxylerini ve kasıtlı atlamayı anlayın

curl http_proxy, https_proxy, all_proxy ve NO_PROXY okur. Proxy ortam değişkenleri CGI tuzağı konusunda açıktır. Gelen Proxy: başlıkları büyük harfle HTTP_PROXY olur. curl bu yüzden HTTP için yalnızca küçük harfli http_proxy kabul eder. Büyük harfli HTTPS_PROXY ve ALL_PROXY kendi şemaları için geçerli kalır.

Laboratuvar her çocuğu temiz bir ortamdan başlattı. Proxy değişkenlerinin her iki harf durumunu, CGI REQUEST_METHOD artıklarını, CURL_CA_BUNDLE, SSL_CERT_FILE, SSL_CERT_DIR, SSLKEYLOGFILE ve REQUESTS_CA_BUNDLE'ı sildi. Sonra her seferinde adlı bir dummy enjekte etti. curl'de trust_env= anahtarı yoktur. Requests trust_env=False ayrıca CA ve netrc bakışını da değiştirir. O bayrağı curl'e kopyalamayın. -q artı temiz bir çocuk ortamı eşdeğer yalıtımdır.

  1. Küçük harfli http_proxy'yi alpha'ya ayarlayın, --proxy-user geçin ve --noproxy '' ekleyin. Origin alpha dedi. Bu yalnızca ortam yönlendirmesidir.
  2. Büyük harfli HTTP_PROXY'yi aynı alpha URL'sine ayarlayın ve -x'i atlayın. Origin doğrudan geldi. Alpha'nın olay sayısı kıpırdamadı. Bu, bu ikili üzerinde ölçülen belgelenmiş güvenlik kuralıdır.
  3. http_proxy'yi alpha'ya ayarlayın ve açık -x beta geçin. Origin beta dedi. Alpha seçilen hop değildi. İki proxy kimliği, bir yerden gelen 200 tahminini yener.
  4. http_proxy'yi alpha'ya, NO_PROXY=127.0.0.1'e ayarlayın, --noproxy '' olmadan. Origin doğrudan oldu ve alpha boş durdu. Bu, kasten çalıştırılan atlama durumudur.
  5. NO_PROXY=127.0.0.1'i tutun ve --noproxy '' ekleyin. Boş liste değişkeni ezer; 8.7.1 kılavuzu 7.53.0'dan beri bunu söyler. Origin yine alpha dedi.
Yürütülen açık -x beta, ortam http_proxy alpha'sını yendi

Hop'u HTTP 200'den asla çıkarmayın. Doğrudan ve proxylenmiş başarı, yolu damgalamadıysanız gövdede aynı durur. Düzenek iletilen HTTP'ye X-Lab-Proxy damgaladı. CONNECT, TLS içindeki origin'e damga vuramaz; kanıt CONNECT günlüğüdür.

06SOCKS5 ve SOCKS5h'i el sıkışması kanıtıyla karşılaştırın

SOCKS, HTTP iletme değildir ve CONNECT de değildir. everything curl'deki SOCKS bölümü tabloyu kısa tutar. SOCKS5 yerelde çözer. SOCKS5h ana bilgisayar adını proxy'ye gönderir. --socks5 ve --socks5-hostname bayrak biçimleridir. -x üzerindeki socks5:// ve socks5h:// URL biçimleridir.

Apple'ın curl 8.7.1'i protokol listesinden socks'u çıkarır ve SOCKS proxy seçeneklerini yine taşır. Başarılı bir SOCKS isteği DNS'in nerede olduğunu kanıtlamaz. El sıkışması ATYP'idir.

  1. http://127.0.0.1:ORIGIN/identity'ye --socks5 127.0.0.1:PORT HTTP 200 ile tamamlandı. Düzenek ATYP ipv4 ve adres 127.0.0.1 kaydetti.
  2. http://lab.curl-fixture.test:ORIGIN/identity'ye --socks5-hostname 127.0.0.1:PORT HTTP 200 ile tamamlandı. Düzenek ATYP domain ve adres lab.curl-fixture.test kaydetti. Proxy o laboratuvar ana bilgisayar adını loopback'e eşledi. Bu eşleme düzenek tesisatıdır, genel DNS'e ölçülmüş bir sızıntı değil.
  3. Orada durun. Bu yazı dış bir çözümleyici yakalama iddiasında bulunmaz.
curl -q -sS --noproxy '' --socks5-hostname 127.0.0.1:SOCKS_PORT http://lab.curl-fixture.test:ORIGIN_PORT/identity
Laboratuvar ana bilgisayar adı için ATYP domain ile yürütülen SOCKS5h el sıkışması

Sağlayıcı belgeleri aynı ayrımı izler. Oxylabs residential protokoller socks5h://pr.oxylabs.io:7777'yi ana bilgisayar adını geçirmek, socks5://'yi çözülmüş bir IP geçirmek diye belgeler. Katalogda hâlâ Smartproxy olarak listelenen Decodo residential protokoller gate.decodo.com:7000 üzerinde socks5h:// belgeler ve us.decodo.com gibi ülke ana bilgisayarlarının SOCKS5 için çalışmadığını söyler. Bunlar belgelenmiş uyum notlarıdır. Bu loopback çalıştırması değildir.

Protokol IP türü değildir. Mobil ve Residential sayfaları çıkış havuzlarını anlatır. SOCKS5 ile HTTP istemci el sıkışmasıdır. Residential bir HTTP hop'unuz veya datacenter bir SOCKS hop'unuz olabilir. Bu düğmeleri birleştirmeyin.

07Bağlantı hatasını aktarım zaman aşımından ayırın

--connect-timeout DNS artı TCP artı, TLS için, el sıkışmasını sınırlar. --max-time tüm aktarımı sınırlar. everything curl'de zaman aşımları --max-time'ın veri hareket ederken de ateşlediğini söyler. Çıkış 28 o zamanlayıcıdır. Requests tarzı bir okuma zaman aşımı değildir.

Bu laboratuvar bir bağlanma zaman aşımı ölçmedi ve paket yakalamadı. Çıkış 7, bir UDP soketinin sahip olduğu geçici loopback porta TCP bağlanmasından geldi. curl Couldn't connect to server yazdırdı, HTTP kodu 000. Bu bir bağlantı hatasıdır. Çıkış 28 değildir.

Gecikmeli gövde yolu diğer şekildir. /slow-body tam başlıkları hemen gönderdi, ilk gövde baytı H'yi flush etti, sonra kalanından önce --max-time 1.5'i bekledi. curl HTTP 200 bildirdi, 000 değil, ve çıkış 28 verdi. Origin ilk bayt olayı kurulmuştu. Alpha GET .../slow-body iletmişti. Bu, gövde başladıktan sonra bir aktarım zaman aşımıdır.

  1. Ölü bir hop için bağlanma hatası bekleyin. Burada sahip olunan bir loopback porta karşı çıkış 7 idi.
  2. Yavaş bir gövde için başlıklar ve bir ilk bayt, sonra --max-time, sonra gerçek HTTP 200 ile çıkış 28 isteyin. Kod 000 iddiayı düşürürdü.
  3. El sıkışmasını gerçekten durdurmuyorsanız --connect-timeout'u belgelendiği gibi bırakın. Bu çalıştırma durdurmadı.
curl -q -sS --noproxy '' -x http://127.0.0.1:PROXY_PORT --proxy-user lab-user:lab-pass --max-time 1.5 http://127.0.0.1:ORIGIN_PORT/slow-body
Yürütülen gecikmeli gövde aktarım zaman aşımı, HTTP 200 sonra curl çıkış 28

Yeniden denemeler ayrı bir anahtardır. --retry, 8.7.1'de her denemede --max-time sayacını sıfırlar. Açarsanız yeniden deneme penceresini --retry-max-time ile sınırlayın. Bir yeniden deneme bayrağını POST için idempotency saymayın.

08Belgelenmiş protokol ve kimlik doğrulama uyumuna göre bir uç seçin

Hop'u satıcının belgelendirdiği gibi seçin, sonra sahip olduğunuz bir düzenekte curl'ü kanıtlayın. Ücretli geçitler aranmadı. Ülke hedefleme, bot karşıtı folklor ve «en iyi hizmet» sıralamaları kapsam dışıdır.

14 Ekim 2026'da alınan Oxylabs residential protokoller HTTP'yi pr.oxylabs.io:7777 üzerine -U customer-USERNAME:PASSWORD ile koyar. Aynı sayfa geçide TLS istediğinizde https://pr.oxylabs.io:7777, proxy'nin ana bilgisayar adını görmesini istediğinizde socks5h://pr.oxylabs.io:7777 ekler. SOCKS5 o sayfada ülkeye özel giriş ana bilgisayarları kullanmaz.

Aynı gün Decodo residential protokoller HTTP'yi gate.decodo.com:7000 ve SOCKS5h'i aynı ana bilgisayara koyar. Bu belgelenmiş şemaları canlı İngilizce kartlarda Oxylabs ve Smartproxy / Decodo ile karşılaştırın. Bu katalog uyumudur, geçit testi değil.

  1. Şemayı istemci desteğine uydurun. Buradaki curl 8.7.1 HTTP iletme, CONNECT, SOCKS5 ve SOCKS5h konuştu. HTTPS proxy'ye TLS belgelerde kalan bir satırdır.
  2. Kimlik doğrulamayı -U'ya uydurun, satıcının belgelendirdiği kullanıcı adı önekleriyle. Origin -u o dizgenin dışında kalır.
  3. Yalnızca bir ana bilgisayarda HTTP ile SOCKS'u ayırmak istiyorsanız hop'u proxy kontrolü ile kontrol edin. Çıkış IP'sini tarayıcı sekmesinde değil, curl'de kontrol edin. curl'ü herhangi bir ücretli uca yöneltmeden önce hop'u sahip olduğunuz yaşayan bir proxy'de kanıtlayın.
Belgelenmiş Oxylabs ve Decodo curl uç uyumu, satıcı performans testi değil
Oxylabs — residential ve datacenter proxy
Oxylabs — residential ve datacenter proxy4.0771

Oxylabs residential, mobil, ISP ve datacenter proxy'leri $30'dan tek aylık abonelik altında satar. Alıcı ödemeleri: kartlar, havale, AliPay, PayPal.

10 ülke
$0,45
1 GB başı
Decodo (Smartproxy) — residential ve datacenter proxy
Decodo (Smartproxy) — residential ve datacenter proxy4.22118

Decodo (eski adı Smartproxy) residential ve datacenter proxy satar. Residential: aylık tarife olmadan $4/GB veya 3 GB için $3.75/GB'dan aylık paketler. Ödeme: kart, PayPal, Alipay, Google/Apple Pay, kripto (sınırlı).

83 ülke
$0,38
1 GB başı
Loopback curl laboratuvarından sıkıştırılmış yürütülen sonuç tablosu
GözlemHTTP durumuCONNECT durumucurl çıkışıNe değişmeli
HTTP proxy, doğru dummy kullanıcı200yok0Yol, yalnızca proxy kimliği uyuyorsa kanıtlanmıştır
HTTP proxy, eksik veya yanlış kullanıcı407yok-f olmadan 0; 8.7.1'de -f ile 22-U'yu düzeltin. Her 407'nin 22 olacağını varsaymayın
HTTP proxy üzerinden HTTPS, güvenilen CA200200 Connection Established0Origin'de --cacert tutun. -k eklemeyin
HTTP proxy üzerinden HTTPS, eksik proxy kullanıcısı00040756CONNECT 407 bu yapıda bir taşıma hatasıdır
HTTPS, CONNECT tamam, güvenilmeyen origin00020060CA'yı düzeltin. Tünel zaten çalıştı
Yalnızca büyük harfli HTTP_PROXY200 doğrudanyok0Küçük harfli http_proxy veya açık -x kullanın
Sahip olunan portta TCP bağlanma reddi000yok7Bağlantı hatası. Zaman aşımı değil
Başlıklar ve ilk bayt, sonra --max-time200yok28Aktarım bütçesi. Bağlanma hatası değil

curl'de proxy nasıl yapılandırılır?

curl -q ile başlayın, sonra -x host:port, hop Basic kimlik doğrulama istiyorsa --proxy-user ekleyin. Loopback testlerinde --noproxy '' ekleyin ki kabuk NO_PROXY proxy'yi atlayamasın. Hop'u yalnızca HTTP 200 ile değil, bir günlük veya origin damgasıyla doğrulayın.

HTTPS bir HTTP proxy kullanabilir mi?

Evet. curl CONNECT gönderir, sonra TLS'i tünelden origin'e koşturur. Bunun için https:// proxy URL'sine ihtiyacınız yoktur. https:// proxy URL'si proxy'ye TLS'dir; bu laboratuvar onu ölçmedi.

-U ile -u nasıl ayrılır?

-U proxy'ye kimlik doğrular. -u origin'e kimlik doğrular. Proxy Proxy-Authorization tüketti. Origin kendi Authorization kimlik bilgilerini kabul etti ve proxy başlığını hiç görmedi. İki kimliği karıştırmak olağan sızıntıdır.

curl büyük harfli HTTP_PROXY'yi neden yok sayar?

CGI sunucuları istek başlıklarını HTTP_ değişkenlerine kopyalar. Bir Proxy başlığı HTTP_PROXY olur. curl, bir CGI betiğinin açık proxy istemcisine çevrilmemesi için HTTP'de yalnızca küçük harfli http_proxy kabul eder. Büyük harfli HTTPS_PROXY HTTPS için hâlâ geçerlidir.

socks5h ana bilgisayar adını nerede çözer?

Proxy'de. --socks5-hostname ve socks5h:// ATYP domain gönderir. --socks5 ve socks5:// yerelde çözer ve bu laboratuvarda 127.0.0.1'e ATYP ipv4 gönderdi. Başarılı bir SOCKS gövdesi DNS konumlayıcısı değildir.

--connect-timeout ve --max-time neyi sınırlar?

--connect-timeout bağlantı kurulumunu sınırlar. --max-time, başlıklardan sonra dahil, tüm aktarımı sınırlar. Bu çalıştırmanın gecikmeli gövdesi HTTP 200 ve curl çıkış 28 döndürdü. Reddedilen bir TCP bağlanma çıkış 7 verdi, 28 değil.