Wie kann ich Curl dazu bringen, den Proxy zu ignorieren?


106

Wie kann ich Curl dazu bringen, den Proxy zu ignorieren? Das Setzen von $ NO_PROXY scheint für mich nicht zu funktionieren.


1
Es würde den Leuten helfen, Ihnen zu antworten, wenn Sie weitere Informationen bereitstellen würden. Auf welcher Plattform bist du? Woher bezieht Curl die Proxy-Einstellungen? Welches Protokoll (HTTP, FTP)? Welche Art von Proxy (HTTP, SOCKS)? Ist es ein transparenter Proxy? Können Sie einen genauen Satz von Befehlen anzeigen, die Ihr Problem aufweisen, sowie deren Ausgabe?
Brian Campbell

Antworten:


53

Ich gehe davon aus, dass curl die Proxy-Adresse aus der Umgebungsvariablen liest http_proxyund dass die Variable ihren Wert behalten sollte. Dann würde in einer Shell wie bash, export http_proxy='';bevor ein Befehl (oder in einem Shell-Skript) vorübergehend seinen Wert ändern würde.

(Im Curl-Handbuch finden Sie alle Variablen unter der ENVIRONMENTÜberschrift.)


19
Oder einfachunset http_proxy
joelittlejohn

Ein Hinweis: Es gibt andere * _proxy env-Variablen wie ftp_proxy. Ich denke, hier ist eine vollständige Liste wiki.archlinux.org/index.php/proxy_settings .
Dmitriusan

Wenn Sie den http_proxy nicht von Fall zu Fall überschreiben möchten, können Sie die Domänen so konfigurieren, dass sie mit $ no_proxy ignoriert werden, und dann Ihren Curl als Alias ​​verwenden: alias curl = 'curl --noproxy $ no_proxy'
Sir4ur0n

1
@jdebon Das funktioniert aus den unten beschriebenen Gründen nicht ( Stackoverflow.com/a/17710829/2189128 ), wenn Sie einen Platzhalter in dieser Umgebungsvariablen haben .
Jeff

@ Jeff Es ist nicht mein Fall, aber schöner Ort, es könnte anderen Personen Probleme bereiten. Vielen Dank!
Sir4ur0n

242

Wenn Sie curlmindestens eine Version haben 7.19.4, können Sie einfach das --noproxyFlag verwenden.

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

Aus dem Handbuch .


5
Curl: Option - Noproxy: ist unbekannt
Roger Ng

2
@RogerNg, wenn sich das Handbuch oder die Verwendung geändert hat, seit ich die Frage beantwortet habe, können Sie die Antwort aktualisieren oder Ihre eigene schreiben. Zum Zeitpunkt des Schreibens war diese Antwort jedoch für die gestellte Frage zutreffend. Wenn sich Ihre Installation nicht gemäß den Spezifikationen verhält, ist dies ein völlig anderes Problem.
Scott Offen

3
curl --noproxy stackoverflow.com stackoverflow.com Dies ist die richtige Empfehlung.
arulraj.net

2
Ich --noproxygehe davon aus, dass die Option für ältere Curl-Versionen nicht verfügbar ist (z. B. solche, die bei Centos / RHEL 5.x verwendet werden)
Dmitriusan

2
Basierend auf der Dokumentation hätte dies nur funktionieren können, --noproxy 127.0.0.1wenn stackoverflow.com auf localhost ausgeführt wurde.
Dannysauer

70

Ich bin auf dasselbe Problem gestoßen, weil ich die Umgebungsvariablen http_proxy und https_proxy festgelegt habe. Aber gelegentlich verbinde ich mich mit einem anderen Netzwerk und muss den Proxy vorübergehend umgehen. Der einfachste Weg, dies zu tun (ohne die Umgebungsvariablen zu ändern), ist:

curl --noproxy '*' stackoverflow.com

Aus dem Handbuch: "Der einzige Platzhalter ist ein einzelnes * Zeichen, das allen Hosts entspricht und den Proxy effektiv deaktiviert."

Das Zeichen * wird in Anführungszeichen gesetzt, damit es nicht fälschlicherweise von der Shell erweitert wird.


12
Hinweis für zukünftige Benutzer: Bash erweitert die lokalen Dateien, wenn ich das * so nicht zitierecurl --noproxy "*" stackoverflow.com
Adam

Sehr nützlich und erwähnenswert, dass dies auch den (SOCKS) Proxy zu ignorieren scheint, den ich in meiner .curlrc-Datei festgelegt habe
MatzFan

1
Dies ist die Antwort, die für mich mit Curl Version 7.22.0
xpereta

23

Dies funktioniert einwandfrei, setzen Sie die Proxy-Zeichenfolge auf ""

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

11

Fügen Sie Ihre Proxy-Einstellungen zu .curlrc hinzu

proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1

Dadurch ignorieren alle Entwicklungsdomänen und lokalen Computeranforderungen den Proxy.


1
//, Dies ist die einzige, die ein Beispiel mit einem Wert zeigt, dessen DNS-Wert mit beginnt ..
Nathan Basanese

Nicht zu verwechseln mit der env-Variablen no_proxy (mit Unterstrich)
Simon Perepelitsa

7

Long Shot, aber versuchen Sie, den Proxy auf "" (leere Zeichenfolge) zu setzen, um alle Proxy-Einstellungen gemäß der Manpage zu überschreiben.


2
Es ist kein "langer Schuss" - es ist der richtige Weg, es zu tun. Laut der Manpage meiner Locke (7.15.5, in der keine Option '--noproxy' angezeigt wird), -x / - proxy <proxyhost [: port]> ... Diese Option überschreibt vorhandene Umgebungsvariablen, auf die Proxy festgelegt wird verwenden. Wenn eine Umgebungsvariable einen Proxy festlegt, können Sie den Proxy auf "" setzen, um ihn zu überschreiben.
Rob Cranfill

5
In '09 war alles ein langer Schuss.
Louis

5
+1, -x "" macht es. - Noproxy mit Platzhalter funktioniert nicht mit meiner Bash, auch wenn ich das "*" zitiere
Eugene

@Eugene: Es funktioniert in Bash 4.3.11 und muss zitiert werden.
Karatedog


6

Zuerst habe ich die aktuelle Proxy-Einstellung mit aufgelistet

env | sort | less

(sollte so etwas sein http_proxy=http://wpad.local.machine.location:port number)

Dann habe ich versucht einzustellen

export http_proxy=";" 

welches diese Fehlermeldung gab:

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

Versucht

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

und es hat funktioniert!

PS! Denken Sie daran, http-proxy mit auf die ursprünglichen Einstellungen zurückzusetzen

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

6

Ich habe http_proxyund bin https_proxydefiniert. Ich möchte diese Umgebungen nicht deaktivieren und erneut einstellen , --noproxy '*' funktioniert aber perfekt für mich.

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

Lahme Antwort, aber: Denken Sie daran, sicherzustellen, dass in einer ~/.curlrcDatei kein Proxy festgelegt ist (...).


1
Danke. Ich hatte mir am Kopf gekratzt, warum Curl die lokalen Umweltbedingungen nicht respektiert. Und dann habe ich die .curlrc nachgeschlagen und es gab einige zusätzliche Konfigurationen. No_proxy dort hinzugefügt und es hat funktioniert!
n3o

1

In meinem Fall (macos, curl 7.54.0) habe ich unten Proxy mit gesetzt~/.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

Mit unbekanntem Grund kann diese Version von curlnicht mit Umgebungsvariablen funktionieren NO_PRXYund no_proxyordnungsgemäß, dann habe ich die Proxy-Umgebungsvariablen einzeln deaktiviert, bis sowohl auf HTTPS_PROXYals auch auf https_proxy.

unset HTTPS_PROXY
unset https_proxy

Es beginnt zu funktionieren und kann eine Verbindung zu internen URLs herstellen

Daher würde ich empfehlen, alle Proxy-Variablen zu deaktivieren, wenn Sie in Ihrer Umgebung eine temporäre Lösung haben.

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY

-1

Meine Locke ignorierte den Proxy unter Ubuntu 12.04 nicht, bis ich die Umgebungsvariable "no_proxy" (Kleinbuchstaben) festlegte. Die Option --noproxy war nicht verfügbar.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.