Jak sprawić, by curl ignorował proxy?


106

Jak sprawić, by curl ignorował proxy? Ustawienie $ NO_PROXY wydaje mi się nie działać.


1
Pomogłoby ludziom odpowiedzieć ci, gdybyś podał więcej informacji. Na jakiej platformie jesteś? Skąd curl pobiera ustawienia proxy? Jaki protokół (HTTP, FTP)? Jaki rodzaj proxy (HTTP, SOCKS)? Czy jest to przezroczysty serwer proxy? Czy możesz pokazać dokładny zestaw poleceń, w których występuje Twój problem, wraz z ich wynikami?
Brian Campbell

Odpowiedzi:


55

Zakładam, że curl odczytuje adres proxy ze zmiennej środowiskowej http_proxyi że ta zmienna powinna zachować swoją wartość. Następnie w powłoce takiej jak bash, export http_proxy='';zanim polecenie (lub w skrypcie powłoki) tymczasowo zmieni swoją wartość.

(Zobacz podręcznik curl dla wszystkich zmiennych, na które patrzy, pod ENVIRONMENTnagłówkiem.)


19
Lub po prostuunset http_proxy
joelittlejohn

Jedna uwaga: istnieją inne zmienne * _proxy env, takie jak ftp_proxy. Myślę, że tutaj jest pełna lista wiki.archlinux.org/index.php/proxy_settings .
Dmitriusan

Jeśli nie chcesz nadpisywać http_proxy indywidualnie, możesz skonfigurować domeny tak, aby ignorowały za pomocą $ no_proxy, a następnie utworzyć alias dla swojego curl: alias curl = 'curl --noproxy $ no_proxy'
Sir4ur0n

1
@jdebon To nie działa, jeśli w tej zmiennej środowiskowej znajduje się symbol wieloznaczny, z powodów opisanych poniżej ( stackoverflow.com/a/17710829/2189128 ).
Jeff

@Jeff To nie mój przypadek, ale fajne miejsce, może to powodować problemy dla innych osób. Dzięki!
Sir4ur0n

247

Jeśli masz curlprzynajmniej wersję 7.19.4, możesz po prostu użyć --noproxyflagi.

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

Z instrukcji .


5
curl: opcja --noproxy: jest nieznana
Roger Ng

2
@RogerNg, jeśli instrukcja lub sposób użycia uległy zmianie od czasu udzielenia odpowiedzi na pytanie, możesz zaktualizować odpowiedź lub napisać własną. Niemniej jednak w chwili pisania tego tekstu odpowiedź ta była poprawna w stosunku do zadanego pytania. Jeśli twoja instalacja nie zachowuje się zgodnie ze specyfikacjami, jest to zupełnie inna kwestia.
Scott Offen

3
curl --noproxy stackoverflow.com stackoverflow.com To jest właściwa pochwała.
arulraj.net

2
Zakładam, że --noproxyopcja nie jest dostępna dla starszych wersji curl (np. Tych, które są używane w Centos / RHEL 5.x)
Dmitriusan

2
Opierając się na dokumentacji, jedynym sposobem, w jaki mogłoby to zadziałać, --noproxy 127.0.0.1było to, że stackoverflow.com działał na hoście lokalnym.
dannysauer

72

Napotkałem ten sam problem, ponieważ ustawiłem zmienne środowiskowe http_proxy i https_proxy. Ale czasami łączę się z inną siecią i muszę tymczasowo ominąć serwer proxy. Najłatwiej to zrobić (bez zmiany zmiennych środowiskowych):

curl --noproxy '*' stackoverflow.com

Z instrukcji: „Jedynym symbolem wieloznacznym jest pojedynczy znak *, który pasuje do wszystkich hostów i skutecznie wyłącza serwer proxy”.

Znak * jest cytowany, aby nie był błędnie rozszerzany przez powłokę.


12
uwaga dla przyszłych użytkowników: Bash rozszerza pliki lokalne, jeśli nie zacytuję * socurl --noproxy "*" stackoverflow.com
Adam

Bardzo przydatne i warte odnotowania, że ​​to również wydaje się ignorować proxy (SOCKS), które ustawiłem w moim pliku
.curlrc

1
To jest odpowiedź, która zadziałała dla mnie przy użyciu wersji curl 7.22.0
xpereta

23

To działa dobrze, ustaw ciąg proxy na „”

curl -x "" http://www.stackoverflow.com

12

Dodaj preferencje serwera proxy do pliku .curlrc

proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1

To powoduje, że wszystkie domeny deweloperskie i żądania komputera lokalnego ignorują proxy.


1
//, jako jedyny pokazuje przykład z wartością z wartością DNS zaczynającą się od ..
Nathan Basanese

Nie mylić ze zmienną env no_proxy (z podkreśleniem)
Simon Perepelitsa

7

Długie ujęcie, ale spróbuj ustawić proxy na "" (pusty łańcuch), które powinno przesłonić wszelkie ustawienia proxy zgodnie ze stroną podręcznika.


2
To nie jest „strzał z dystansu” - to właściwy sposób. Zgodnie z moją stroną podręcznika curl (7.15.5, która nie pokazuje opcji '--noproxy'), -x / - proxy <proxyhost [: port]> ... Ta opcja przesłania istniejące zmienne środowiskowe, które ustawiają proxy na posługiwać się. Jeśli istnieje zmienna środowiskowa ustawiająca serwer proxy, możesz ustawić serwer proxy na „”, aby go zastąpić.
Rob Cranfill,

5
W '09 wszystko było dalekie.
Louis

5
+1, -x "" to robi. --noproxy z symbolem wieloznacznym nie działa z moim bashem, nawet jeśli zacytuję „*”
Eugene

@Eugene: Działa w bash 4.3.11 i musi być cytowany.
karatedog


6

Najpierw wymieniłem bieżące ustawienia proxy z

env | sort | less

(powinno być coś w stylu http_proxy=http://wpad.local.machine.location:port number)

Potem spróbowałem ustawić

export http_proxy=";" 

który dał ten komunikat o błędzie:

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

Wypróbowany

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

i zadziałało!

PS! Pamiętaj, aby przywrócić pierwotne ustawienia http-proxy za pomocą

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

6

Mam http_proxyi jestem https_proxyzdefiniowany. Nie chcę usuwać i ponownie ustawiać tych środowisk, ale --noproxy '*' działa idealnie dla mnie.

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

Kiepska odpowiedź, ale: Pamiętaj, aby upewnić się, że w ~/.curlrcpliku nie jest ustawiony serwer proxy (...).


1
Dziękuję Ci. Drapałem się po głowie, dlaczego curl nie szanuje lokalnych warunków środowiskowych. Następnie sprawdziłem plik .curlrc i pojawiło się kilka dodatkowych konfiguracji. Dodano no_proxy i zadziałało!
n3o

1

W moim przypadku (macos, curl 7.54.0) mam poniżej ustawione proxy z~/.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

Z nieznanego powodu ta wersja curlnie może działać ze zmiennymi środowiskowymi NO_PRXYi no_proxypoprawnie, wtedy usuwam zmienne środowiskowe proxy jeden po drugim, aż do obu HTTPS_PROXYi https_proxy.

unset HTTPS_PROXY
unset https_proxy

zaczyna działać i może łączyć się z wewnętrznymi adresami URL

Dlatego zalecałbym usunięcie wszystkich zmiennych proxy, jeśli masz w swoim środowisku rozwiązanie tymczasowe.

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY

-1

Mój curl nie ignorował proxy w Ubuntu 12.04, dopóki nie ustawiłem zmiennej środowiskowej „no_proxy” (małe litery). Opcja --noproxy nie była dostępna.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.