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.)
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.
@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.
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.
Außerdem gab es vor langer Zeit einen Fehler bei Curl http://sourceforge.net/p/curl/bugs/185/ . Vielleicht verwenden Sie eine alte Curl-Version, die diesen Fehler enthält.
Ich habe http_proxyund bin https_proxydefiniert. Ich möchte diese Umgebungen nicht deaktivieren und erneut einstellen ,--noproxy '*' funktioniert aber perfekt für mich.
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
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.
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.
Antworten:
Ich gehe davon aus, dass curl die Proxy-Adresse aus der Umgebungsvariablen liest
http_proxy
und 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.)quelle
unset http_proxy
ftp_proxy
. Ich denke, hier ist eine vollständige Liste wiki.archlinux.org/index.php/proxy_settings .Wenn Sie
curl
mindestens eine Version haben7.19.4
, können Sie einfach das--noproxy
Flag verwenden.Aus dem Handbuch .
quelle
--noproxy
gehe 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)--noproxy 127.0.0.1
wenn stackoverflow.com auf localhost ausgeführt wurde.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:
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.
quelle
curl --noproxy "*" stackoverflow.com
Dies funktioniert einwandfrei, setzen Sie die Proxy-Zeichenfolge auf ""
quelle
Fügen Sie Ihre Proxy-Einstellungen zu .curlrc hinzu
Dadurch ignorieren alle Entwicklungsdomänen und lokalen Computeranforderungen den Proxy.
quelle
.
.Long Shot, aber versuchen Sie, den Proxy auf "" (leere Zeichenfolge) zu setzen, um alle Proxy-Einstellungen gemäß der Manpage zu überschreiben.
quelle
Sie sollten die
$no_proxy
Variable env (Kleinbuchstaben) verwenden. Beispiele finden Sie unter https://wiki.archlinux.org/index.php/proxy_settings .Außerdem gab es vor langer Zeit einen Fehler bei Curl http://sourceforge.net/p/curl/bugs/185/ . Vielleicht verwenden Sie eine alte Curl-Version, die diesen Fehler enthält.
quelle
Zuerst habe ich die aktuelle Proxy-Einstellung mit aufgelistet
(sollte so etwas sein
http_proxy=http://wpad.local.machine.location:port number
)Dann habe ich versucht einzustellen
welches diese Fehlermeldung gab:
Versucht
und es hat funktioniert!
PS! Denken Sie daran, http-proxy mit auf die ursprünglichen Einstellungen zurückzusetzen
quelle
Ich habe
http_proxy
und binhttps_proxy
definiert. Ich möchte diese Umgebungen nicht deaktivieren und erneut einstellen ,--noproxy '*'
funktioniert aber perfekt für mich.quelle
Lahme Antwort, aber: Denken Sie daran, sicherzustellen, dass in einer
~/.curlrc
Datei kein Proxy festgelegt ist (...).quelle
In meinem Fall (macos,
curl 7.54.0
) habe ich unten Proxy mit gesetzt~/.bash_profile
Mit unbekanntem Grund kann diese Version von
curl
nicht mit Umgebungsvariablen funktionierenNO_PRXY
undno_proxy
ordnungsgemäß, dann habe ich die Proxy-Umgebungsvariablen einzeln deaktiviert, bis sowohl aufHTTPS_PROXY
als auch aufhttps_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.
quelle
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.
quelle