wykonywanie żądań HTTP za pomocą cURL (przy użyciu PROXY)

451

Mam ten adres proxy: 125.119.175.48:8909

Jak mogę wykonać żądanie HTTP przy użyciu cURL curl http://www.example.com, ale podając adres proxy mojej sieci?

użytkownik873286
źródło

Odpowiedzi:

411

Ogólny sposób:

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

Następnie możesz połączyć się przez proxy z (wielu) aplikacji.

I, zgodnie z komentarzem poniżej, dla https:

export https_proxy=https://your.proxy.server:port/
airween
źródło
76
Kiedy potrzebujesz proxy ruchu HTTPS, zmienna środowiskowa ma duże litery: HTTPS_PROXY
phatblat
18
Ze stron podręcznika Zmienne środowiskowe można określić małymi lub dużymi literami. Wersja z małymi literami ma pierwszeństwo. http_proxy jest wyjątkiem, ponieważ jest dostępny tylko małymi literami. Użycie zmiennej środowiskowej do ustawienia proxy ma taki sam efekt, jak użycie opcji --proxy.
Kapitan Lepton,
@BipinVayalu, co chcesz sprawdzić? W ten sposób, co opisuję powyżej, klient używa proxy „bezpośrednio”, a nie w sposób transparentny. Tak więc serwer proxy podaje standardowe odpowiedzi HTTP (w tym kody HTTP). Jeśli wyeksportujesz niepoprawną zmienną środowiskową http_proxy (np. Zły port ...), klient nie będzie mógł się z nią połączyć i wyświetli komunikat o błędzie: „Ostrzeżenie! Nie można połączyć się ze zdalnym hostem!” Lub coś podobnego - po prostu spróbuj :)
lot między
15
Jeśli sprawdzisz kod źródłowy curl, zobaczysz w url.c (wiersz 4337 w wersji 7.39), że sprawdzają wersję pisaną małymi literami, a jeśli nie mogą jej znaleźć, sprawdzają wielkie litery.
Raistmaj
1
Większość użytkowników przesłała mi poprawkę, teraz ją udostępniam. Jeśli chcesz korzystać z połączenia HTTPS przez serwer proxy, wykonaj następujące czynności: wyeksportuj https_proxy = your.proxy.server: port Uwaga : w schemacie URL jest proto „http”, a nie httpS!
lot między
662

Od 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.
Karl Barker
źródło
curl: (7) nie można połączyć się z hostem curl: (7) nie można połączyć się z hostem
użytkownik873286
Występuje błąd powyżej po uruchomieniu tego polecenia: curl -x, --proxy 122.72.2.200:80 mysite.com/test.php?id=1
user873286
61
„-x, --proxy” oznacza, że ​​można użyć dowolnego z nich. Poleceniem powinno być „curl -x 122.72.2.200:80 mysite.com/test.php?id=1 ” lub „curl --proxy 122.72.2.200:80 mysite.com/test.php?id=1
IBBoard,
8
Dokumenty są poprawnie cytowane, jak wyżej, jednak użytkownik i hasło powinny być wyrażone inaczej:-x user:password@proxyhost:port
Ed Chapel
Dzięki za najlepszą odpowiedź!
haotang
128

Powyższe rozwiązania mogą nie działać z niektórymi wersjami curl, które sam wypróbowałem (curl 7.22.0). Ale dla mnie zadziałało:

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

Mam nadzieję, że to rozwiązuje problem lepiej!

Amar
źródło
Jeśli napotkasz ten sam problem, loki wysłane przez Debian Wheezy nadal nie obsługują sztuczki env
hyperknot
Mam to zamiast tego[1] 4812
Aminah Nuraini
80

Uwaga: jeśli używasz proxy SOCKS, zamiast proxy HTTP / HTTPS, musisz użyć --socks5przełącznika:

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

Możesz także użyć --socks5-hostnamezamiast --socks5do rozwiązania DNS po stronie proxy.

Filipe Correia
źródło
6
Nie działało to dla mnie, ale używanie działało --socks5-hostname.
Michał Rybak
2
@ Michał Rybak, który będzie działał tak samo, ale rozwiąże DNS po stronie proxy. Zobacz stronę podręcznika, aby uzyskać więcej informacji.
Filipe Correia,
3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339wydaje mi się, że działa dobrze. Czy --proxyopcja jest w jakiś sposób gorsza niż w --socks5przypadku korzystania z serwerów proxy socks5?
@ user993683 To zależy od wersji. --proxyjest prawdopodobnie tym, czego chcesz teraz, ale nie zawsze było obsługiwane. Należy również pamiętać, że socks5://i socks5h://wykonać rozpoznawanie nazwy hosta (DNS) odpowiednio przed i po połączeniu z serwerem proxy.
Michael - Where's Clay Shirky
51

jako dodatek do airween, innym dobrym pomysłem jest dodanie tego do twojego .bashrc, abyś mógł przełączyć się z środowiska bez proxy na proxy:

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

GDZIE TWOJA PROPORCJA: TWOJE SPRAWOZDANIE to dokładnie to, twój adres IP i port proxy :-).

Potem po prostu robię

proxyon

Twój system zacznie używać proxy, i odwrotnie:

proxyoff
Alejandro Moreno
źródło
34

użyj następujących

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

192.168.X.X:XX podaj adres IP i port serwera proxy.

-v tryb pełny poda więcej szczegółów, w tym nagłówki i odpowiedź.

13krn
źródło
2
To powinna być odpowiedź. Nie każdy chce określić zmienną globalną (eksport) dla każdego żądania HTTP wykonanego przez każdego klienta HTTP na twoim hoście. Ta opcja daje większą elastyczność, IMHO.
ivanleoncz
Jest to bardzo przydatne, gdy próbujesz różnych serwerów proxy przeciwko adresowi URL. Dzięki.
redAce
30

możesz użyć :

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

jak wyjaśnił Karl

smitkpatel
źródło
25
„zgodnie z wyjaśnieniem Karla”, co oznacza, że ​​ta odpowiedź nie jest lepsza niż kopia tej odpowiedzi.
Raedwald
26

Lubię to używać, aby uzyskać adres IP, pod którym jestem widziany

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

Mam nadzieję, że to komuś pomoże.

Bmetge
źródło
19

Aby curlskonfigurować proxy w pliku ~/.curlrc( _curlrcw systemie Windows), dodając proxywartość, składnia jest następująca:

proxy = http://username:password@proxy-host:port
kenorb
źródło
Otóż ​​to! Skonfigurowałem ustawienia proxy kilka lat temu w tym pliku i zastanawiałem się dzisiaj, dlaczego curl już nie działa, teraz zmienił się adres proxy, a zmienne env są ustawione poprawnie. Dziękuję za to!
emale
15

Podsumowując wszystkie świetne wspomniane odpowiedzi:

curl -x http://<user>:<pass>@<proxyhost>:<port>/ -o <filename> -L <link>
M. Mashaye
źródło
8

Z proxy z uwierzytelnianiem korzystam:

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

ponieważ nie wiem, dlaczego curl nie używa zmiennych środowiskowych / catch http [s] _proxy .

Pedro R. Sánchez A.
źródło
6
C:\Desktop>curl --head https://www.google.com/ --proxy 1.1.1.1:8080
Debashish Saha
źródło
5
Rozważ dodanie wyjaśnienia do swojego rozwiązania.
Pochmurnik
3

Nie musisz eksportować http[s]_proxyzmiennej powłoki, jeśli tylko ustawiasz proxy dla jednorazowej komendy. na przykład

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

Powiedziałbym, że wolałbym, curl -xgdybym wiedział, że zawsze będę korzystać z serwera proxy.

przemyśleć
źródło
2

W zależności od miejsca pracy może być konieczne określenie opcji -klub --insecureopcji zwijania, aby uniknąć potencjalnych problemów z certyfikatami urzędu certyfikacji.

curl -x <myCompanyProxy>:<port> -k -O -L <link to file to download>
Matt Legler
źródło
1
sudo curl -x http://10.1.1.50:8080/ -fsSL https://download.docker.com/linux/ubuntu/gpg

To działało idealnie dla mnie, pojawia się błąd, ponieważ curl musi ustawić proxy

Pamiętaj, aby zastąpić serwer proxy swoim serwerem, mój, „przykładem” był http://10.1.1.50:8080/ .

IbarMario
źródło
0

W przypadku, gdy serwer proxy używa automatycznego serwera proxy z plikiem PAC. Rzeczywiste proxy możemy znaleźć w javascript z adresu URL PAC.

A jeśli serwer proxy wymaga uwierzytelnienia, możemy najpierw użyć zwykłej przeglądarki internetowej, aby uzyskać dostęp do strony internetowej, która promuje dialog uwierzytelniania. Po uwierzytelnieniu możemy użyć wireshark do przechwycenia wysyłanych pakietów HTTP do serwera proxy, z pakietu http możemy uzyskać token uwierzytelnienia z nagłówka http: Autoryzacja proxy

Następnie możemy ustawić zmienną środowiskową http_proxy, a także dołączyć token autoryzacji do nagłówka http: Autoryzacja proxy

eksport http_proxy = http: // serwer proxy: port

curl -H "Autoryzacja serwera proxy: xxxx" http: // targetURL

Jianwu Chen
źródło