Як змусити curl ігнорувати проксі?


106

Як змусити curl ігнорувати проксі? Налаштування $ NO_PROXY, здається, не працює для мене.


1
Це допоможе людям відповісти вам, якби ви надали ще трохи інформації. На якій платформі ви знаходитесь? Звідки curl отримує налаштування проксі-сервера? Який протокол (HTTP, FTP)? Що таке проксі (HTTP, SOCKS)? Це прозорий проксі? Чи можете ви показати точний набір команд, які демонструють вашу проблему, разом із їх результатом?
Брайан Кемпбелл

Відповіді:


54

Я припускаю, що curl читає адресу проксі з змінної оточення, http_proxyі що змінна повинна зберігати своє значення. Тоді в оболонці, як bash, export http_proxy='';перед командою (або в скрипті оболонки) тимчасово змінити своє значення.

(Дивіться посібник з curl для всіх змінних, на які він дивиться, під ENVIRONMENTзаголовком.)


19
Або простоunset http_proxy
joelittlejohn

Одне зауваження: є й інші * _proxy env змінні ftp_proxy. Я думаю, ось повний список wiki.archlinux.org/index.php/proxy_settings .
Дмитріусан

Якщо ви не хочете змінювати http_proxy у кожному конкретному випадку, ви можете налаштувати домени на ігнорування за допомогою $ no_proxy, а потім псевдонім вашого curl: alias curl = 'curl --noproxy $ no_proxy'
Sir4ur0n

1
@jdebon Це не спрацьовує, якщо у вказаній нижче змінній оточуючого типу є підстановка (див. причини) ( stackoverflow.com/a/17710829/2189128 ).
Джефф

@Jeff Це не мій випадок, але приємне місце, воно може спричинити певні проблеми для інших людей. Дякую!
Sir4ur0n

243

Якщо ваша curlпринаймні версія 7.19.4, ви можете просто використовувати --noproxyпрапор.

curl --noproxy "*" http://www.stackoverflow.com

З посібника .


5
curl: option --noproxy: невідомо
Roger Ng

2
@RogerNg, якщо посібник чи використання змінилися з моменту, коли я відповів на питання, сміливо оновіть відповідь або напишіть свою власну. Тим не менше, на момент написання ця відповідь була точною для поставленого питання. Якщо ваша установка не працює відповідно до технічних характеристик, це зовсім інша проблема.
Скотт Оффен

3
локон --noproxy stackoverflow.com stackoverflow.com Це правильний Commend.
arulraj.net

2
Я припускаю, що --noproxyваріант не доступний для старих версій завитків (наприклад, тих, які використовуються у Centos / RHEL 5.x)
Дмитріусан

2
Виходячи з документації, єдиний спосіб, з яким це могло колись працювати, --noproxy 127.0.0.1було, якби stackoverflow.com працював на localhost.
dannysauer

70

Я зіткнувся з тією ж проблемою, тому що я встановив змінні середовища http_proxy та https_proxy. Але час від часу я підключаюся до іншої мережі і мені потрібно тимчасово обійти проксі. Найпростіший спосіб зробити це (не змінюючи змінні середовища):

curl --noproxy '*' stackoverflow.com

З посібника: "Єдиний підмітний знак - це символ *, який відповідає всім хостам і ефективно відключає проксі."

Символ * цитується так, щоб він помилково не розширювався оболонкою.


12
Примітка для майбутніх користувачів: Bash розширює локальні файли, якщо я не цитую * такcurl --noproxy "*" stackoverflow.com
Адам

Дуже корисно і варто зазначити, що це також ігнорує (SOCKS) проксі, який я встановив у своєму .curlrc файлі
MatzFan

1
Це відповідь, яка працювала на мене за допомогою curl версії 7.22.0
xpereta


11

Додайте налаштування проксі-сервера в .curlrc

proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1

Це змушує всі домени розробки та запит локальної машини ігнорувати проксі.


1
//, Це єдиний, який показує приклад зі значенням, значення якого починається з DNS ..
Натан Басанес

Не плутати з env змінною no_proxy (з підкресленням)
Саймон Перепелиця

7

Довго знімайте, але спробуйте встановити проксі на "" (порожній рядок), який повинен змінювати будь-які параметри проксі відповідно до сторінки "man".


2
Це не «довгий постріл» - це правильний спосіб зробити це. Відповідно до чоловічої сторінки моєї завитки (7.15.5, на якій не відображено параметр '--noproxy'), -x / - proxy <proxyhost [: port]> ... Цей параметр відміняє існуючі змінні середовища, що встановлює проксі на використання. Якщо є змінна середовище, яка встановлює проксі, ви можете встановити проксі на "", щоб замінити її.
Роб Кранфілл

5
У 09 році все було віддалено.
Луї-

5
+1, -x "" робить це. --noproxy з wildcard не працює з моїм баштом, навіть якщо я цитую "*"
Євген

@Eugene: Він працює в bash 4.3.11, і його треба цитувати.
karatedog

7

Ви повинні використовувати $no_proxyзмінну env (малі регістри). Для отримання прикладів зверніться до https://wiki.archlinux.org/index.php/proxy_settings .

Крім того, давно з'явилася помилка у curl http://sourceforge.net/p/curl/bugs/185/ , можливо, ви використовуєте давню версію curl, яка включає цю помилку.


6

По-перше, я перерахував поточний параметр проксі

env | sort | less

(має бути щось на кшталт http_proxy=http://wpad.local.machine.location:port number)

Потім я спробував налаштувати

export http_proxy=";" 

який дав це повідомлення про помилку:

curl: (5) Couldn't resolve proxy ';'

Спробував

export http_proxy="" && curl http://servername:portnumber/destinationpath/ -d 55

і це спрацювало!

PS! Не забудьте повернути http-проксі до його початкових налаштувань за допомогою

export http_proxy=http://wpad.local.machine.location:port number

6

У мене є http_proxyі https_proxyвизначені. Я не хочу знову скасовувати та налаштовувати ці середовища, але --noproxy '*' прекрасно працює для мене.

curl --noproxy '*' -XGET 172.17.0.2:9200
{
  "status" : 200,
  "name" : "Medusa",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.5.0",
    "build_hash" : "544816042d40151d3ce4ba4f95399d7860dc2e92",
    "build_timestamp" : "2015-03-23T14:30:58Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}

1

Відповідь Lame, але: не забудьте переконатися, що у ~/.curlrcфайлі не встановлено проксі (...).


1
Спасибі. Мені було чухати голову, чому завивка не поважає місцеві оточення. А потім я подивився на .curlrc і з'явилися додаткові конфігурації. Там додано no_proxy і воно спрацювало!
n3o

1

У моєму випадку (macos, curl 7.54.0) у мене нижче встановлений проксі~/.bash_profile

$ env |grep -i proxy |cut -d = -f1|sort
FTP_PROXY
HTTPS_PROXY
HTTP_PROXY
NO_PROXY
PROXY
ftp_proxy
http_proxy
https_proxy
no_proxy

З невідомою причиною ця версія curlне може працювати зі змінними середовища NO_PRXYі no_proxyналежним чином, тоді я скидаю змінні середовища проксі по черзі, до обох HTTPS_PROXYі https_proxy.

unset HTTPS_PROXY
unset https_proxy

він починає працювати і може підключатися до внутрішніх URL-адрес

Тож я б рекомендував зняти всі проксі-змінні, якщо у вашому середовищі є тимчасове рішення.

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY

-1

Мій згорт не ігнорував проксі на Ubuntu 12.04, поки я не встановив змінну середовища "no_proxy" (нижній регістр). Опція --noproxy недоступна.

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