cURL ile HTTP istekleri gerçekleştirme (PROXY kullanarak)


451

Bu proxy adresi var: 125.119.175.48:8909

Ağımın curl http://www.example.comproxy adresini belirterek cURL benzeri kullanarak bir HTTP isteğini nasıl gerçekleştirebilirim ?

Yanıtlar:


411

Genel yol:

export http_proxy=http://your.proxy.server:port/

Daha sonra (birçok) uygulamadan proxy üzerinden bağlanabilirsiniz.

Ve, aşağıdaki yoruma göre, https için:

export https_proxy=https://your.proxy.server:port/

76
HTTPS trafiğini proxy yapmanız gerektiğinde, ortam değişkeni büyük harf olur: HTTPS_PROXY
phatblat

18
Gönderen man sayfaları ortam değişkenleri küçük harf veya büyük harf belirtilebilir. Küçük harfli versiyon önceliklidir. http_proxy bir istisnadır, çünkü yalnızca küçük harflerle kullanılabilir. Proxy'yi ayarlamak için bir ortam değişkeni kullanmak --proxy seçeneğini kullanmakla aynı etkiye sahiptir.
Kaptan Lepton

@BipinVayalu, neyi kontrol etmek istiyorsun? Bu şekilde, yukarıda tarif ettiğim, istemci proxy değil, "doğrudan yol" kullanır. Böylece, proxy standart HTTP yanıtlarını verir (HTTP kodları dahil). Yanlış bir http_proxy ortam değişkenini dışa aktarırsanız (örn. Bozuk bağlantı noktası ...), istemci buna bağlanamaz ve bir hata iletisi verir: "Uyarı! Uzak ana bilgisayara bağlanamadı!" Veya benzeri bir şey - sadece dene :)
airween

15
Kıvrılma kaynak kodunu kontrol ederseniz url.c'de (7.39 sürüm 4337) küçük harf sürümünü kontrol ettiklerini ve bulamazlarsa büyük harfleri kontrol edin.
Raistmaj

1
Çoğu kullanıcı bana bir düzeltme gönderdi, şimdi bunu paylaşıyorum. HTTPS bağlantısını proxy üzerinden kullanmak istiyorsanız, bunu yapmanız gerekir: export https_proxy = your.proxy.server: port URL şemasında httpS yerine "http" protokolü olduğunu unutmayın!
airween

663

Gönderen man curl:

-x, --proxy <[protocol://][user:password@]proxyhost[:port]>

     Use the specified HTTP proxy. 
     If the port number is not specified, it is assumed at port 1080.

curl: (7) ana bilgisayara bağlanamadı curl: (7) ana bilgisayara bağlanamadı
user873286

Bu komutu çalıştırdığımda yukarıdaki hatayı alıyorum: curl -x, --proxy 122.72.2.200:80 mysite.com/test.php?id=1
user873286

61
"-x, --proxy", her ikisinin de kullanılabileceği anlamına gelir. Komut "curl -x 122.72.2.200:80 mysite.com/test.php?id=1 " veya "curl --proxy 122.72.2.200:80 mysite.com/test.php?id=1 " olmalıdır
IBBoard

8
Dokümanlar yukarıdaki gibi doğru şekilde alıntılanmıştır, ancak kullanıcı ve şifre farklı şekilde ifade edilmelidir:-x user:password@proxyhost:port
Ed Chapel

En iyi cevap için teşekkürler!
haotang

128

Yukarıdaki çözümler, kendim için denediğim bazı curl sürümleriyle çalışmayabilir (curl 7.22.0). Ama benim için işe yarayan şuydu:

curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url

Umarım sorunu daha iyi çözer!


Aynı sorunla karşılaşan Debian Wheezy tarafından gönderilen kıvrım hala env hilesini desteklemiyor
hyperknot

Bunun yerine var[1] 4812
Aminah Nuraini

80

HTTP / HTTPS proxy yerine SOCKS proxy kullanıyorsanız, bunun yerine --socks5anahtarı kullanmanız gerekeceğine dikkat edin :

curl --socks5 125.119.175.48:8909 http://example.com/

Proxy tarafında DNS'yi çözümlemek --socks5-hostnameyerine de kullanabilirsiniz --socks5.


6
Bu benim için işe yaramadı, ama kullanmak işe --socks5-hostnameyaradı.
Michał Rybak

2
@ MichałRybak aynı şekilde çalışacak ancak proxy tarafında DNS'yi çözecektir. Daha fazla bilgi için kılavuz sayfasına bakınız.
Filipe Correia

3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339benim için iyi çalışıyor gibi görünüyor. Mı --proxyaşağı bir şekilde opsiyon --socks5socks5 vekiller kullanırken?

@ user993683 Sürüme bağlıdır. --proxymuhtemelen istediğiniz şeydir, ancak her zaman desteklenmemiştir. Ayrıca buna dikkat edin socks5://ve socks5h://proxy'ye bağlanmadan önce ve sonra ana bilgisayar adı (DNS) çözümlemesini gerçekleştirin.
Michael - Clay Shirky

51

airween'e bir ek olarak, başka bir iyi fikir bunu .bashrc'nize eklemektir, böylece proxy olmayan ortamdan proxy ortamına geçiş yapabilirsiniz:

alias proxyon="export http_proxy='http://YOURPROXY:YOURPORT';export https_proxy='http://YOURPROXY:YOURPORT'"
alias proxyoff="export http_proxy='';export https_proxy=''"

NEREDEN YOK: YOURPORT tam olarak bu, ip ve port proxy'niz :-).

Sonra, sadece

proxyon

sisteminiz proxy'yi kullanmaya başlayacak ve bunun tam tersi:

proxyoff

34

aşağıdakileri kullan

curl -I -x 192.168.X.X:XX http://google.com

192.168.X.X:XX vekil sunucu ip ve port koymak.

-v ayrıntılı mod, üstbilgiler ve yanıt dahil olmak üzere daha fazla ayrıntı verecektir.


2
Cevap bu olmalı. Herkes, ana makinenizdeki her HTTP istemcisi tarafından gerçekleştirilen her HTTP isteği için genel bir değişken (dışa aktarma) belirtmek istemez. Bu seçenek daha fazla esneklik sağlar, IMHO.
ivanleoncz

Bir URL'ye karşı farklı proxy'ler denediğinizde bu çok kullanışlıdır. Teşekkürler.
redAce

30

kullanabilirsiniz :

curl http://www.example.com --proxy http://125.119.175.48:8909

Karl tarafından açıklandığı gibi


26
“Karl tarafından açıklandığı gibi”, yani bu cevap bu cevabın bir kopyasından daha iyi değildir.
Raedwald

26

Gördüğüm IP'yi almak için bunu kullanmayı seviyorum

curl -x http://proxy_server:proxy_port https://api.ipify.org?format=json && echo

Umarım bu birine yardımcı olur.


19

İçin curlsize proxy yapılandırabilirsiniz ~/.curlrc( _curlrcekleyerek Windows üzerinde) dosyası proxydeğerini, sözdizimi:

proxy = http://username:password@proxy-host:port

Bu kadar! Birkaç yıl önce bu dosyada proxy ayarını yapılandırdı ve bugün merak etti, neden curl artık çalışmıyor? Proxy adresi değişti ve env değişkenlerinin hepsi doğru ayarlandı. Bunun için teşekkürler!
emale

15

Bahsedilen tüm harika cevapları özetlemek gerekirse:

curl -x http://<user>:<pass>@<proxyhost>:<port>/ -o <filename> -L <link>

8

Kimlik doğrulaması olan bir proxy kullanıyorum:

curl -x <protocol>://<user>:<password>@<host>:<port> --proxy-anyauth <url>

çünkü curl'un neden http [s] _proxy ortam değişkenlerini kullanmadığını / yakalamadığını bilmiyorum .



3

http[s]_proxyProxy'yi bir kerelik komut için ayarlıyorsanız, kabuk değişkenini dışa aktarmanız gerekmez . Örneğin

http_proxy=http://your.proxy.server:port curl http://www.example.com

Bununla birlikte curl -x, her zaman bir proxy kullanacağımı bilsem tercih ederim .


2

İş yerinize bağlı olarak, CA sertifikalarıyla ilgili geçmişte oluşabilecek sorunları elde etmek için kıvrılma seçeneğini -kveya --insecureseçeneğini belirtmeniz gerekebilir .

curl -x <myCompanyProxy>:<port> -k -O -L <link to file to download>

1
sudo curl -x http://10.1.1.50:8080/ -fsSL https://download.docker.com/linux/ubuntu/gpg

Bu benim için mükemmel çalıştı, hata geliyor çünkü curl proxy'yi ayarlaması gerekiyor

Proxy yerine proxy'nizi değiştirin, benimki, "örnek" http://10.1.1.50:8080/ idi .


0

Proxy'nin PAC dosyasıyla otomatik proxy kullanması durumunda. Gerçek proxy'yi PAC URL'sindeki javascript'ten bulabiliriz.

Proxy'nin kimlik doğrulaması gerekiyorsa, önce kimlik doğrulama iletişim kutusunu tanıtacak web sitesine erişmek için normal bir web tarayıcısı kullanabiliriz. Kimlik doğrulamasından sonra, proxy sunucusuna gönderilen http paketini http paketinden yakalamak için wireshark'ı kullanabiliriz, http başlığından auth jetonunu alabiliriz: Proxy-Authorization

Sonra http_proxy ortam değişkenini ayarlayabilir ve http başlığına auth token ekleyebiliriz: Proxy-Authorization

http_proxy = http: // proxyserver: bağlantı noktasını dışa aktar

curl -H "Proxy-Yetkilendirme: xxxx" http: // targetURL

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.