Ausführen von HTTP-Anforderungen mit cURL (mit PROXY)


451

Ich habe diese Proxy-Adresse: 125.119.175.48:8909

Wie kann ich eine HTTP-Anfrage mit cURL wie ausführen curl http://www.example.com, aber die Proxy-Adresse meines Netzwerks angeben ?

Antworten:


411

Allgemeiner Weg:

export http_proxy=http://your.proxy.server:port/

Dann können Sie über einen Proxy von (vielen) Anwendungen aus eine Verbindung herstellen.

Und laut Kommentar unten für https:

export https_proxy=https://your.proxy.server:port/

76
Wenn Sie HTTPS-Verkehr als Proxy verwenden müssen, ist die Umgebungsvariable in Großbuchstaben geschrieben: HTTPS_PROXY
Phatblat

18
Über die Manpages Die Umgebungsvariablen können in Klein- oder Großbuchstaben angegeben werden. Die Kleinbuchstabenversion hat Vorrang. http_proxy ist eine Ausnahme, da es nur in Kleinbuchstaben verfügbar ist. Die Verwendung einer Umgebungsvariablen zum Festlegen des Proxys hat den gleichen Effekt wie die Verwendung der Option --proxy.
Kapitän Lepton

@BipinVayalu, was möchten Sie überprüfen? Auf diese Weise verwendet der Client, wie oben beschrieben, den Proxy "direkt", nicht transparent. Der Proxy gibt also die Standard-HTTP-Antworten (einschließlich HTTP-Codes). Wenn Sie eine falsche http_proxy-Umgebungsvariable exportieren (z. B. fehlerhafter Port ...), konnte der Client keine Verbindung herstellen, und es wird eine Fehlermeldung angezeigt: "Warnung! Verbindung zum Remote-Host konnte nicht hergestellt werden!" Oder ähnliches -
Probieren Sie

15
Wenn Sie den Curl-Quellcode überprüfen, sehen Sie unter url.c (Zeile 4337 in Version 7.39), ob sie nach Kleinbuchstaben suchen. Wenn sie ihn nicht finden können, suchen Sie nach Großbuchstaben.
Raistmaj

1
Die meisten Benutzer haben mir eine Korrektur gesendet, jetzt teile ich das. Wenn Sie eine HTTPS-Verbindung über einen Proxy verwenden möchten, sollten Sie Folgendes tun: export https_proxy = your.proxy.server: port Beachten Sie, dass das URL-Schema "http" -Proto enthält, nicht httpS!
zwischen dem

662

Von man curl:

-x, --proxy <[protocol://][user:password@]proxyhost[:port]>

     Use the specified HTTP proxy. 
     If the port number is not specified, it is assumed at port 1080.

curl: (7) konnte keine Verbindung zum Host herstellen curl: (7) konnte keine Verbindung zum Host herstellen
user873286

Ich erhalte den obigen Fehler, wenn ich diesen Befehl ausführe: curl -x, --proxy 122.72.2.200:80 mysite.com/test.php?id=1
user873286

61
"-x, --proxy" bedeutet, dass beide verwendet werden können. Der Befehl sollte entweder "curl -x 122.72.2.200:80 sein mysite.com/test.php?id=1 " oder "curl --proxy 122.72.2.200:80 mysite.com/test.php?id=1 "
IBBoard

8
Die Dokumente werden wie oben korrekt zitiert, Benutzer und Passwort sollten jedoch unterschiedlich ausgedrückt werden:-x user:password@proxyhost:port
Ed Chapel

Danke für die beste Antwort!
Haotang

128

Die oben genannten Lösungen funktionieren möglicherweise nicht mit einigen Curl-Versionen, die ich selbst ausprobiert habe (Curl 7.22.0). Aber was für mich funktioniert hat war:

curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url

Hoffe, es löst das Problem besser!


Auf das gleiche Problem
stoßen

[1] 4812
Habe

80

Beachten Sie, dass Sie bei Verwendung eines SOCKS-Proxys anstelle eines HTTP / HTTPS-Proxys --socks5stattdessen den Switch verwenden müssen:

curl --socks5 125.119.175.48:8909 http://example.com/

Sie können DNS auch --socks5-hostnameanstelle von --socks5auf der Proxy-Seite auflösen.


6
Das hat bei mir nicht funktioniert, aber mit --socks5-hostname.
Michał Rybak

2
@ MichałRybak, das genauso funktioniert, aber DNS auf der Proxy-Seite auflöst. Weitere Informationen finden Sie in der Manpage .
Filipe Correia

3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339scheint für mich gut zu funktionieren. Ist die --proxyOption der --socks5Verwendung von socks5-Proxys in irgendeiner Weise unterlegen ?

@ user993683 Es ist versionabhängig. --proxyist wahrscheinlich das, was Sie jetzt wollen, aber es wurde nicht immer unterstützt. Beachten Sie auch, dass socks5://und socks5h://führen Sie die DNS-Auflösung (Hostname) vor und nach dem Herstellen einer Verbindung zum Proxy durch.
Michael - Wo ist Clay Shirky?

51

Als Ergänzung zu Airween ist es eine weitere gute Idee, dies in Ihre .bashrc-Datei aufzunehmen, damit Sie von einer Umgebung ohne Proxy zu einer Umgebung mit Proxy wechseln können:

alias proxyon="export http_proxy='http://YOURPROXY:YOURPORT';export https_proxy='http://YOURPROXY:YOURPORT'"
alias proxyoff="export http_proxy='';export https_proxy=''"

WO IHR PROXY: IHR PORT ist genau das, Ihr IP- und Port-Proxy :-).

Dann einfach machen

proxyon

Ihr System beginnt mit der Verwendung des Proxys und genau umgekehrt mit:

proxyoff

34

Verwenden Sie Folgendes

curl -I -x 192.168.X.X:XX http://google.com

192.168.X.X:XX Legen Sie die IP-Adresse und den Port Ihres Proxyservers fest.

-v Im ausführlichen Modus werden weitere Details einschließlich Überschriften und Antworten angezeigt.


2
Dies sollte die Antwort sein. Nicht jeder möchte für jede HTTP-Anforderung, die von jedem HTTP-Client auf Ihrem Host ausgeführt wird, eine globale Variable (Export) angeben. Diese Option bietet meiner Meinung nach mehr Flexibilität.
ivanleoncz

Dies ist sehr nützlich, wenn Sie verschiedene Proxys gegen eine URL testen. Vielen Dank.
RedAce

30

Sie können verwenden:

curl http://www.example.com --proxy http://125.119.175.48:8909

wie von Karl erklärt


25
"wie von Karl erklärt", was bedeutet, dass diese Antwort nicht besser ist als eine Kopie dieser Antwort.
Raedwald

26

Ich benutze dies gerne, um die IP zu erhalten, unter der ich gesehen werde

curl -x http://proxy_server:proxy_port https://api.ipify.org?format=json && echo

Hoffe das hilft jemandem.


19

Da curlSie den Proxy in Ihrer ~/.curlrc( _curlrcunter Windows) Datei konfigurieren können, indem Sie einen proxyWert hinzufügen , lautet die Syntax:

proxy = http://username:password@proxy-host:port

Das ist es! Die Proxy-Einstellung wurde vor einigen Jahren in dieser Datei konfiguriert und heute gefragt, warum Curl jetzt nicht mehr funktioniert. Die Proxy-Adresse wurde geändert und die Umgebungsvariablen sind alle korrekt eingestellt. Dank dafür!
Emale

15

Fassen Sie einfach alle großen erwähnten Antworten zusammen:

curl -x http://<user>:<pass>@<proxyhost>:<port>/ -o <filename> -L <link>

8

Mit einem Proxy mit Authentifizierung verwende ich:

curl -x <protocol>://<user>:<password>@<host>:<port> --proxy-anyauth <url>

weil ich nicht weiß, warum curl keine http [s] _proxy- Umgebungsvariablen verwendet / fängt .


6
C:\Desktop>curl --head https://www.google.com/ --proxy 1.1.1.1:8080

6
Erwägen Sie, Ihrer Lösung eine Erklärung hinzuzufügen.
Pochmurnik

3

Sie müssen die http[s]_proxyShell-Variable nicht exportieren , wenn Sie nur den Proxy für einen einmaligen Befehl festlegen. z.B

http_proxy=http://your.proxy.server:port curl http://www.example.com

Das heißt, ich würde es vorziehen, curl -xwenn ich wüsste, dass ich immer einen Proxy verwenden würde.


2

Abhängig von Ihrem Arbeitsplatz müssen Sie möglicherweise auch -kdie --insecureOption oder die Option für das Einrollen angeben , um potenzielle Probleme mit CA-Zertifikaten zu vermeiden.

curl -x <myCompanyProxy>:<port> -k -O -L <link to file to download>

1
sudo curl -x http://10.1.1.50:8080/ -fsSL https://download.docker.com/linux/ubuntu/gpg

Das hat bei mir perfekt funktioniert, der Fehler kommt, weil Curl den Proxy einstellen muss

Denken Sie daran, den Proxy durch Ihren Proxy zu ersetzen. Mein Beispiel war http://10.1.1.50:8080/ .


0

Falls der Proxy einen automatischen Proxy mit PAC-Datei verwendet. Den tatsächlichen Proxy finden Sie im Javascript unter der PAC-URL.

Und wenn der Proxy eine Authentifizierung benötigt, können wir zuerst einen normalen Webbrowser verwenden, um auf die Website zuzugreifen, die den Authentifizierungsdialog fördert. Nach der Authentifizierung können wir Wireshark verwenden, um die an den Proxyserver gesendeten http-Pakete zu erfassen. Aus dem http-Paket können wir das Authentifizierungstoken aus dem http-Header abrufen : Proxy-Authorization

Dann können wir die Umgebungsvariable http_proxy festlegen und auch das Authentifizierungstoken in den http-Header aufnehmen: Proxy-Authorization

export http_proxy = http: // proxyserver: port

curl -H "Proxy-Autorisierung: xxxx" http: // targetURL

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.