виконання HTTP-запитів за допомогою CURL (використовуючи PROXY)


451

Я маю цю проксі-адресу: 125.119.175.48:8909

Як я можу виконати HTTP-запит, використовуючи на зразок cURL curl http://www.example.com, але вказавши проксі-адресу моєї мережі?

Відповіді:


411

Загальний спосіб:

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

Тоді ви можете підключитися через проксі з (багатьох) додатків.

І, відповідно до коментаря нижче, для https:

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

76
Коли вам потрібно проксі HTTPS-трафік, змінна середовища є верхній регістр: HTTPS_PROXY
phatblat

18
З підручних сторінок Змінні середовища можуть бути вказані у малому та верхньому регістрі. Версія з нижнього регістру має перевагу. http_proxy - виняток, оскільки він доступний лише в нижньому регістрі. Використання змінної середовища для встановлення проксі має такий же ефект, як і використання параметра --proxy.
Капітан Лептон

@BipinVayalu, що ти хочеш перевірити? Таким чином, що я описав вище, клієнт використовує проксі "прямий шлях", а не прозоро. Отже, проксі надає стандартні відповіді HTTP (включаючи коди HTTP). Якщо ви експортуєте неправильну змінну середовища http_proxy (наприклад, поганий порт ...), клієнт не зміг до цього підключитися, і він видає повідомлення про помилку: "Увага! Не вдалося підключитися до віддаленого хоста!", Або щось подібне - просто спробуйте :)
між

15
Якщо ви перевірите вихідний код curl, ви побачите на url.c (рядок 4337 у версії 7.39), що вони перевіряють малу версію, і якщо вони не можуть її знайти, перевірте великі регістри.
Raistmaj

1
Більшість користувачів надіслали мені виправлення, зараз я цим ділюсь. Якщо ви хочете використовувати HTTPS-з'єднання через проксі, тоді вам слід зробити це: експортуйте https_proxy = your.proxy.server: port Зауважте, що у схемі URL є протокол "http", а не httpS!
повітряний проміжок між

663

Від 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) не вдалося підключитися до хосту curl: (7) не вдалося підключитися до хоста
user873286

Я отримую вище помилку, коли запускаю цю команду: curl -x, --proxy 122.72.2.200:80 mysite.com/test.php?id=1
user873286

61
"-x, --proxy" означає, що можна використовувати будь-який. Команда повинна бути або "curl -x 122.72.2.200:80 mysite.com/test.php?id=1 ", або "curl --proxy 122.72.2.200:80 mysite.com/test.php?id=1 "
IBBoard

8
Документи правильно цитуються, як зазначено вище, проте користувач та пароль повинні бути виражені інакше:-x user:password@proxyhost:port
Ed Chapel

Дякую за найкращу відповідь!
haotang

128

Наведені вище рішення можуть не працювати з деякими версіями curl, я спробував їх для себе (curl 7.22.0). Але для мене працювало:

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

Сподіваюся, що це вирішить питання краще!


Натрапивши на цю ж проблему, завивка, яку надсилає Debian Wheezy, досі не підтримує трюк env
hyperknot

Отримав це натомість[1] 4812
Аміна Нураїні

80

Не забудьте, що якщо ви використовуєте проксі-сервер SOCKS, замість проксі-сервера HTTP / HTTPS, вам потрібно буде --socks5замість цього використовувати комутатор:

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

Ви також можете використовувати --socks5-hostnameзамість того, --socks5щоб вирішити DNS на стороні проксі.


6
Це не спрацювало для мене, але з використанням --socks5-hostnameзробили.
Michał Rybak

2
@ MichałRybak, який буде працювати так само, але вирішити DNS на стороні проксі. Докладніші відомості див. На сторінці чоловіка .
Філіпе Коррея

3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339здається, працює для мене добре. Чи --proxyваріант дещо поступається --socks5при використанні проксі-серверів socks5?

@ user993683 Це залежить від версії. --proxyМабуть, те, що ви хочете, зараз, але це не завжди підтримувалося. Також зауважте, що socks5://і socks5h://виконайте роздільну здатність імені хоста (DNS) до і після підключення до проксі відповідно.
Майкл - Де Клей

51

як доповнення до аеродрому, ще одна хороша ідея - додати це у свій.

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

ДЕ ВАША ПРАКТИКА: ВАШИЙ ДОПОМОГА - це саме те, ваш ip та порт проксі :-)

Тоді, просто роблячи

proxyon

ваша система почне використовувати проксі, і навпаки:

proxyoff

34

скористайтеся наступним

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

192.168.X.X:XX поставити ip і порт проксі-сервера.

-v багатослівний режим, він дасть більше деталей, включаючи заголовки та відповіді.


2
Це має бути відповіддю. Не кожен хоче вказати глобальну змінну (експорт) для кожного запиту HTTP, який виконує кожен HTTP-клієнт вашого хоста. Цей варіант дає більшу гнучкість, IMHO.
ivanleoncz

Це настільки корисно, коли ви намагаєтеся отримати різні проксі-адреси проти URL-адреси. Дякую.
redAce

30

Ви можете використовувати:

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

як пояснив Карл


26
"як пояснив Карл", що означає, що ця відповідь не є кращою, ніж копія цієї відповіді.
Raedwald

26

Мені подобається використовувати це для того, щоб отримати IP, під яким я бачусь

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

Сподіваюся, що це комусь допоможе.


19

Оскільки curlви можете налаштувати проксі у вашому ~/.curlrc( _curlrcу Windows) файлі, додавши proxyзначення, синтаксис є:

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

Це воно! Конфігурував налаштування проксі-сервера кілька років тому у цьому файлі і сьогодні задався питанням, чому curl вже не працює, адреса проксі-сервера змінилася і значення env vars правильне. Дякую за це!
emale

15

Просто узагальнення всіх чудових відповідей:

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

8

Я використовую проксі з аутентифікацією:

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

тому що, я не знаю, чому curl не використовує / не переймає змінні середовища http [s] _proxy .



3

Вам не потрібно експортувати http[s]_proxyзмінну оболонки, якщо ви просто встановлюєте проксі-сервер для одноразової команди. напр

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

Це curl -xозначає , що я вважаю за краще, якби знав, що завжди буду використовувати проксі.


2

Залежно від робочого місця, вам може знадобитися вказати -kабо --insecureваріант для завитка, щоб усунути можливі проблеми з сертифікатами CA.

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

Це працювало для мене ідеально, помилка приходить, тому що curl потрібно встановити проксі

Пам’ятайте, замініть проксі на ваш проксі, мій, "прикладом" було http://10.1.1.50:8080/ .


0

Якщо проксі використовує автоматичний проксі з файлом PAC. Ми можемо знайти фактичний проксі-сервер у JavaScript з URL-адреси PAC.

І якщо проксі потрібна автентифікація, ми можемо спочатку використовувати звичайний веб-браузер для доступу до веб-сайту, який сприятиме діалогу автентифікації. Після аутентифікації ми можемо використовувати wireshark для зйомки пакета http, що надсилається на проксі-сервер, з http пакета ми можемо отримати маркер автентифікації з заголовка http: Proxy-Authorization

Тоді ми можемо встановити змінну середовища http_proxy і також включити маркер автентифікації в заголовку http: Proxy-Authorization

експортувати http_proxy = http: // proxyserver: port

curl -H "Авторизація проксі: xxxx" http: // targetURL

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.