Если вы предоставите дополнительную информацию, это поможет людям ответить вам. На какой платформе вы находитесь? Откуда curl берет настройки прокси? Какой протокол (HTTP, FTP)? Какой прокси (HTTP, SOCKS)? Это прозрачный прокси? Можете ли вы показать точный набор команд, отражающих вашу проблему, вместе с их выводом?
Брайан Кэмпбелл,
Ответы:
55
Я предполагаю, что curl считывает адрес прокси из переменной среды http_proxyи что переменная должна сохранять свое значение. Затем в оболочке, такой как bash, export http_proxy='';до того, как команда (или в сценарии оболочки) временно изменит свое значение.
(См. Руководство по curl для всех переменных, на которые он смотрит, под ENVIRONMENTзаголовком.)
Если вы не хотите переопределять http_proxy в каждом конкретном случае, вы можете настроить игнорирование доменов с помощью $ no_proxy, а затем присвоить псевдоним вашему curl: alias curl = 'curl --noproxy $ no_proxy'
Sir4ur0n
1
@jdebon Это не работает, если у вас есть подстановочный знак в этой переменной среды, по причинам, описанным ниже ( stackoverflow.com/a/17710829/2189128 ).
Джефф
@Jeff Это не мой случай, но хорошее место, это может вызвать проблемы у других людей. Спасибо!
Sir4ur0n
248
Если у вас curlхотя бы версия 7.19.4, вы можете просто использовать --noproxyфлаг.
@RogerNg, если руководство или использование изменились с тех пор, как я ответил на вопрос, не стесняйтесь обновить ответ или написать свой собственный. Тем не менее, на момент написания этот ответ был точным для заданного вопроса. Если ваша установка не соответствует спецификациям, это совершенно другая проблема.
Скотт Оффен
3
curl --noproxy stackoverflow.com stackoverflow.com Это правильный ответ.
arulraj.net 01
2
Я предполагаю, что эта --noproxyопция недоступна для более старых версий curl (например, тех, которые используются в Centos / RHEL 5.x)
Дмитриусан
2
Согласно документации, единственный способ, с которым это могло когда-либо работать, --noproxy 127.0.0.1- это если stackoverflow.com работал на localhost.
dannysauer
72
Я столкнулся с той же проблемой, потому что установил переменные среды http_proxy и https_proxy. Но иногда я подключаюсь к другой сети, и мне нужно временно обойти прокси. Самый простой способ сделать это (без изменения переменных среды):
curl --noproxy '*' stackoverflow.com
Из руководства: «Единственный подстановочный знак - это один символ *, который соответствует всем хостам и эффективно отключает прокси».
Символ * заключен в кавычки, чтобы оболочка не расширила его по ошибке.
//, это единственное, что показывает пример со значением, значение DNS которого начинается с ..
Натан Басанезе,
Не путать с переменной env no_proxy (с подчеркиванием)
Симон Перепелица
7
Длинный выстрел, но попробуйте установить прокси-сервер на "" (пустая строка), который должен переопределить любые настройки прокси в соответствии со страницей руководства.
Это не «дальний план» - это правильный способ сделать это. Согласно моей странице руководства curl (7.15.5, которая не показывает параметр '--noproxy'), -x / - proxy <proxyhost [: port]> ... Эта опция переопределяет существующие переменные среды, которые устанавливают прокси в использовать. Если есть переменная среды, задающая прокси, вы можете установить прокси на "", чтобы переопределить его.
Роб Крэнфилл
5
В 2009 году все было под угрозой.
Луи
5
+1, -x "" делает это. --noproxy с подстановочными знаками не работает с моим bash, даже если я цитирую «*»
Евгений
@Eugene: Он работает в bash 4.3.11, и его нужно цитировать.
Кроме того, давным-давно была ошибка в curl http://sourceforge.net/p/curl/bugs/185/ , возможно, вы используете старую версию curl, которая включает эту ошибку.
Спасибо. Я ломал голову, почему curl не соблюдает местные условия. А потом я просмотрел .curlrc и там было несколько дополнительных конфигураций. Добавил туда no_proxy и все заработало!
n3o
1
В моем случае (macos, curl 7.54.0) у меня установлен прокси ниже с~/.bash_profile
По неизвестной причине эта версия curlне может работать с переменными среды NO_PRXYи no_proxyдолжным образом, затем я сбрасываю переменные среды прокси одну за другой, пока оба HTTPS_PROXYи https_proxy.
unset HTTPS_PROXY
unset https_proxy
он начинает работать и может подключаться к внутренним URL-адресам
Поэтому я бы рекомендовал отключить все переменные прокси, если в вашей среде есть временное решение.
Ответы:
Я предполагаю, что curl считывает адрес прокси из переменной среды
http_proxy
и что переменная должна сохранять свое значение. Затем в оболочке, такой как bash,export http_proxy='';
до того, как команда (или в сценарии оболочки) временно изменит свое значение.(См. Руководство по curl для всех переменных, на которые он смотрит, под
ENVIRONMENT
заголовком.)источник
unset http_proxy
ftp_proxy
. Думаю, вот полный список wiki.archlinux.org/index.php/proxy_settings .Если у вас
curl
хотя бы версия7.19.4
, вы можете просто использовать--noproxy
флаг.Из мануала .
источник
--noproxy
опция недоступна для более старых версий curl (например, тех, которые используются в Centos / RHEL 5.x)--noproxy 127.0.0.1
- это если stackoverflow.com работал на localhost.Я столкнулся с той же проблемой, потому что установил переменные среды http_proxy и https_proxy. Но иногда я подключаюсь к другой сети, и мне нужно временно обойти прокси. Самый простой способ сделать это (без изменения переменных среды):
Из руководства: «Единственный подстановочный знак - это один символ *, который соответствует всем хостам и эффективно отключает прокси».
Символ * заключен в кавычки, чтобы оболочка не расширила его по ошибке.
источник
curl --noproxy "*" stackoverflow.com
Это работает нормально, установите строку прокси на ""
источник
Добавьте свои настройки прокси в .curlrc
Это заставляет все домены разработчиков и запросы локального компьютера игнорировать прокси.
источник
.
.Длинный выстрел, но попробуйте установить прокси-сервер на "" (пустая строка), который должен переопределить любые настройки прокси в соответствии со страницей руководства.
источник
Вы должны использовать
$no_proxy
переменную env (в нижнем регистре). Пожалуйста, обратитесь к https://wiki.archlinux.org/index.php/proxy_settings для примеров.Кроме того, давным-давно была ошибка в curl http://sourceforge.net/p/curl/bugs/185/ , возможно, вы используете старую версию curl, которая включает эту ошибку.
источник
Во-первых, я перечислил текущие настройки прокси с помощью
(должно быть что-то вроде
http_proxy=http://wpad.local.machine.location:port number
)Затем я попытался установить
который дал это сообщение об ошибке:
Пытался
и это сработало!
PS! Не забудьте вернуть http-прокси к исходным настройкам с помощью
источник
У меня есть
http_proxy
иhttps_proxy
определены. Я не хочу сбрасывать и снова устанавливать эти среды, но--noproxy '*'
для меня это отлично работает.источник
Неудачный ответ, но: не забудьте убедиться, что в
~/.curlrc
файле не установлен прокси (...).источник
В моем случае (macos,
curl 7.54.0
) у меня установлен прокси ниже с~/.bash_profile
По неизвестной причине эта версия
curl
не может работать с переменными средыNO_PRXY
иno_proxy
должным образом, затем я сбрасываю переменные среды прокси одну за другой, пока обаHTTPS_PROXY
иhttps_proxy
.он начинает работать и может подключаться к внутренним URL-адресам
Поэтому я бы рекомендовал отключить все переменные прокси, если в вашей среде есть временное решение.
источник
Мой curl не игнорировал прокси в Ubuntu 12.04, пока я не установил переменную среды «no_proxy» (нижний регистр). Параметр --noproxy был недоступен.
источник