2009-04-29 3 views
59

Как заставить curl игнорировать прокси? Настройка $ NO_PROXY, похоже, не работает для меня.Как заставить curl игнорировать прокси?

+0

Это поможет людям ответить вам, если вы предоставили дополнительную информацию. На какой платформе вы работаете? Где curl получает настройки прокси? Какой протокол (HTTP, FTP)? Какой прокси (HTTP, SOCKS)? Является ли это прозрачным прокси? Можете ли вы показать точный набор команд, которые показывают вашу проблему, вместе с их выходом? –

ответ

29

Предполагаю, что curl считывает адрес прокси из переменной окружения http_proxy и что переменная должна сохранять ее значение. Затем в оболочке, например bash, export http_proxy=''; до того, как команда (или в скрипте оболочки) временно изменит ее значение.

(см инструкцию Curl для всех переменных, она смотрит на, под ENVIRONMENT заголовком.)

+10

Или просто 'unset http_proxy' – joelittlejohn

+0

Одно примечание: есть и другие переменные * _proxy env, такие как' ftp_proxy'. Я думаю, вот полный список https://wiki.archlinux.org/index.php/proxy_settings. – Dmitriusan

+0

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

5

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

+2

Это не «длинный выстрел» - это правильный способ сделать это. Согласно моей странице man curl (7.15.5, которая не показывает параметр «--noproxy»), -x/- proxy ... Этот параметр переопределяет существующие переменные среды, которые устанавливают прокси для использования. Если есть переменная среды, задающая прокси-сервер, вы можете установить прокси-сервер для «переопределения». –

+4

В '09 все было длинным выстрелом. – Louis

+3

+1, -x "" делает это. --noproxy с подстановочным знаком не работает с моим bash, даже если я цитирую «*» – Eugene

4

Во-первых, я перечислил текущие настройки с

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 
110

Если ваш curl по крайней мере, версия 7.19.4, вы могли бы просто использовать --noproxy флаг.

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

От manual.

+3

curl: option --noproxy: неизвестно –

+0

@RogerNg, если руководство или использование изменилось, так как я ответил на вопрос, не стесняйтесь обновлять ответ или писать самостоятельно. Тем не менее, на момент написания, этот ответ был точным для заданного вопроса. Если ваша установка не ведет себя в соответствии со спецификациями, это еще одна проблема. –

+0

@RogerNg, взглянув на некоторые из ваших недавно опубликованных вопросов здесь, в stackoverflow, вы можете запутать curl с PHP cUrl, что не то же самое. –

52

Я столкнулся с той же проблемой, потому что задал переменные окружения http_proxy и https_proxy. Но иногда я подключаюсь к другой сети и должен временно отключать прокси-сервер. Самый простой способ сделать это (без изменения переменных среды) является:

curl --noproxy '*' stackoverflow.com 

Из инструкции: «только подстановочные является один символ *, который соответствует всем хостам, и эффективно отключает прокси.»

Символ * цитируется так, чтобы оболочка не была ошибочно расширена.

+9

примечание для пользователей furture: Bash расширяет локальные файлы, если я не цитирую * so' curl -noproxy * * "stackoverflow.com' – Adam

+0

Очень полезно и стоит отметить, что это также игнорирует прокси-сервер (SOCKS), который я установил в моем файле .curlrc – MatzFan

+1

Это ответ, который работал для меня с использованием curl версии 7.22.0 – xpereta

-1

My curl не игнорировал прокси-сервер на Ubuntu 12.04, пока не установил переменную среды «no_proxy» (нижний регистр). Опция --noproxy недоступна.

2

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

Кроме того, была ошибка при скручивании давным-давно http://sourceforge.net/p/curl/bugs/185/, может быть, вы используете древнюю версию curl, которая включает в себя эту ошибку.

5

У меня есть 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" 
} 
0

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

3

Добавьте прокси предпочтения в .curlrc

proxy = 1.2.3.4 
noproxy = .dev,localhost,127.0.0.1 

Это делает все Dev домены и запрос локальной машине игнорировать прокси-сервер.

Смежные вопросы