Die Verwendung eines Proxys mit cURL erfordert die Angabe der Adresse und des Ports des Proxyservers mittels der Befehlszeilenoption -x oder --proxy, wodurch cURL-Anfragen über einen Vermittlungsserver geleitet werden können.
Dieser Artikel beschreibt die verschiedenen Methoden und Befehlszeilenoptionen, die in cURL für die Interaktion mit Proxydiensten zur Verfügung stehen, einschließlich grundlegender HTTP/HTTPS-Proxys, authentifizierter Proxys, SOCKS-Proxys und der Konfiguration über Umgebungsvariablen.
Grundlegende Proxy-Konfiguration
Die gängigste Methode, cURL zur Verwendung eines Proxys anzuweisen, ist die Option -x oder --proxy, gefolgt von der Adresse und dem Port des Proxyservers.
HTTP/HTTPS-Proxy
Um eine HTTP- oder HTTPS-Anfrage über einen HTTP/HTTPS-Proxy zu leiten, geben Sie die Proxy-Adresse und den Port an.
Syntax:
curl -x [protocol://][user:password@]proxyhost[:port] [URL]
Beispiele:
-
Verwendung eines HTTP-Proxys für ein HTTP-Ziel:
bash curl -x http://your.proxy.server:8080 http://example.com
Dieser Befehl weist cURL an, die Anfrage fürhttp://example.comüberyour.proxy.serverauf Port8080unter Verwendung des HTTP-Proxy-Protokolls zu senden. -
Verwendung eines HTTP-Proxys für ein HTTPS-Ziel:
bash curl -x http://your.proxy.server:8080 https://secure.example.com
Beim Proxying eines HTTPS-Ziels über einen HTTP-Proxy verwendet cURL typischerweise dieCONNECT-Methode, um einen Tunnel durch den Proxy zum Zielserver aufzubauen. Der SSL/TLS-Handshake erfolgt dann direkt zwischen cURL undsecure.example.com, ohne dass der HTTP-Proxy an der Verschlüsselung beteiligt ist. -
Verwendung eines HTTPS-Proxys für ein HTTP-Ziel:
bash curl -x https://your.secure.proxy.server:8443 http://example.com
Dies leitet die Anfrage über einen Proxy, der selbst HTTPS verwendet. Die Verbindung zwischen cURL undyour.secure.proxy.serverist verschlüsselt.
Authentifizierte Proxys
Viele Proxydienste erfordern eine Authentifizierung. cURL unterstützt verschiedene Authentifizierungsmethoden für Proxys, hauptsächlich Basic, NTLM und Digest.
Basic Authentication
Für Proxys, die einen Benutzernamen und ein Passwort erfordern, verwenden Sie die Option --proxy-user oder betten Sie die Anmeldeinformationen direkt in die Proxy-URL ein.
Syntax:
curl -x [protocol://]proxyhost[:port] --proxy-user "username:password" [URL]
curl -x [protocol://]username:password@proxyhost[:port] [URL]
Beispiele:
-
Verwendung von
--proxy-user:
bash curl -x http://your.proxy.server:8080 --proxy-user "proxyuser:proxypass" http://example.com -
Einbetten von Anmeldeinformationen in die URL:
bash curl -x http://proxyuser:proxypass@your.proxy.server:8080 http://example.com
Sonderzeichen im Benutzernamen oder Passwort müssen URL-kodiert werden, falls sie vorhanden sind. Zum Beispiel sollte ein Passwortp@sswordalsp%40sswordangegeben werden.
Andere Authentifizierungsmethoden
Während Basic Authentication üblich ist, unterstützt cURL auch andere Methoden für spezifische Umgebungen.
--proxy-ntlm: Aktiviert die NTLM-Authentifizierung für den Proxy.--proxy-digest: Aktiviert die Digest-Authentifizierung für den Proxy.
Beispiel (NTLM):
curl -x http://your.proxy.server:8080 --proxy-ntlm --proxy-user "DOMAIN\proxyuser:proxypass" http://example.com
SOCKS-Proxys
SOCKS (Socket Secure)-Proxys arbeiten auf einer niedrigeren Ebene als HTTP-Proxys und verarbeiten verschiedene Netzwerkprotokolle. cURL unterstützt SOCKS4, SOCKS4a und SOCKS5.
SOCKS5-Proxy
SOCKS5 ist das vielseitigste SOCKS-Protokoll, das IPv4, IPv6, UDP und Authentifizierung unterstützt.
Syntax:
curl --socks5 [user:password@]proxyhost[:port] [URL]
Beispiele:
-
Grundlegender SOCKS5-Proxy:
bash curl --socks5 your.socks5.server:1080 http://example.com
Standardmäßig löst cURL den Hostnamenexample.comlokal auf, bevor die IP-Adresse an den SOCKS5-Proxy gesendet wird. -
SOCKS5-Proxy mit Remote-DNS-Auflösung:
bash curl --socks5-hostname your.socks5.server:1080 http://example.com
Die Option--socks5-hostnameweist cURL an, den Hostnamenexample.coman den SOCKS5-Proxy zu senden, sodass der Proxy die DNS-Auflösung durchführen kann. Dies ist entscheidend für Anonymität und das Umgehen von Geo-Einschränkungen, bei denen eine lokale DNS-Auflösung Ihren Standort verraten könnte. -
SOCKS5-Proxy mit Authentifizierung:
bash curl --socks5-hostname socksuser:sockspass@your.socks5.server:1080 http://example.com
SOCKS4/SOCKS4a-Proxy
SOCKS4 ist ein älteres Protokoll, hauptsächlich für IPv4, und unterstützt keine Authentifizierung. SOCKS4a erweitert SOCKS4, um dem Proxy die Auflösung von Hostnamen zu ermöglichen.
Syntax:
curl --socks4 proxyhost[:port] [URL]
curl --socks4a proxyhost[:port] [URL]
Beispiel (SOCKS4a):
curl --socks4a your.socks4.server:1080 http://example.com
Ähnlich wie --socks5-hostname stellt --socks4a sicher, dass der Proxy den Ziel-Hostnamen auflöst.
Proxying von HTTPS-Zielen mit SSL/TLS
Wenn cURL eine HTTPS-Anfrage über einen HTTP-Proxy leitet, initiiert es eine CONNECT-Anfrage an den Proxy. Der Proxy stellt dann einen TCP-Tunnel zum Ziel-HTTPS-Server her. cURL führt den SSL/TLS-Handshake direkt mit dem Zielserver durch diesen Tunnel durch.
SSL-Zertifikatsprüfung
Standardmäßig überprüft cURL das SSL-Zertifikat des Zielservers. Wenn das Zertifikat ungültig, abgelaufen oder selbstsigniert ist, bricht cURL die Verbindung ab.
-
--insecureoder-k: Deaktiviert die SSL-Zertifikatsprüfung. Mit Vorsicht verwenden, hauptsächlich für Tests oder bekannte vertrauenswürdige Umgebungen mit selbstsignierten Zertifikaten.
bash curl -x http://your.proxy.server:8080 https://self-signed.example.com -k -
--cacert [file]: Gibt ein benutzerdefiniertes CA-Zertifikatsbündel zur Überprüfung an.
bash curl -x http://your.proxy.server:8080 https://secure.example.com --cacert /path/to/custom_ca.pem
Umgebungsvariablen für die Proxy-Konfiguration
cURL kann Proxy-Einstellungen auch aus Umgebungsvariablen übernehmen. Dies ist nützlich für systemweite oder sitzungsweite Proxy-Konfigurationen, ohne die Option -x für jeden Befehl angeben zu müssen.
Gängige Umgebungsvariablen
http_proxy: Proxy für HTTP-Anfragen.https_proxy: Proxy für HTTPS-Anfragen.all_proxy: Ein Fallback-Proxy für alle Protokolle, wennhttp_proxyoderhttps_proxynicht gesetzt sind.no_proxy: Eine durch Kommas getrennte Liste von Hostnamen, Domänen oder IP-Adressen, die den Proxy umgehen sollen.
Syntax:
export http_proxy="http://your.proxy.server:8080"
export https_proxy="http://your.proxy.server:8080" # Hinweis: Oft wird ein HTTP-Proxy für HTTPS-Ziele verwendet
export no_proxy="localhost,127.0.0.1,.localdomain"
Beispiele:
-
HTTP-Proxy einstellen:
bash export http_proxy="http://proxyuser:proxypass@your.proxy.server:8080" curl http://example.com -
HTTPS-Proxy einstellen (über HTTP-Proxy):
bash export https_proxy="http://your.proxy.server:8080" curl https://secure.example.com -
Proxy für bestimmte Hosts umgehen:
bash export http_proxy="http://your.proxy.server:8080" export no_proxy="internal.example.com" curl http://internal.example.com # Diese Anfrage umgeht den Proxy curl http://external.example.com # Diese Anfrage verwendet den Proxy
Präzedenz
Befehlszeilenoptionen haben Vorrang vor Umgebungsvariablen. Wenn -x angegeben wird, überschreibt es alle http_proxy, https_proxy oder all_proxy Umgebungsvariablen.
Fehlerbehebung bei Proxy-Verbindungen
Beim Auftreten von Problemen mit cURL und Proxys können verschiedene Optionen bei der Diagnose helfen.
-
--verboseoder-v: Liefert detaillierte Informationen über die Anfrage und Antwort, einschließlich Proxy-Verbindungsversuchen, Headern und SSL/TLS-Aushandlung. Dies ist oft der erste Schritt beim Debugging.
bash curl -v -x http://your.proxy.server:8080 http://example.com -
--trace [file]: Schreibt eine vollständige Ablaufverfolgung aller eingehenden und ausgehenden Daten, einschließlich Header und Body, in eine angegebene Datei.
bash curl --trace debug.log -x http://your.proxy.server:8080 http://example.com -
Proxy-Server-Logs: Überprüfen Sie die Logs Ihres Proxyservers auf Verbindungsversuche, Authentifizierungsfehler oder Fehlermeldungen im Zusammenhang mit Ihren cURL-Anfragen.
-
Netzwerkkonnektivität: Überprüfen Sie, ob der Computer, auf dem cURL ausgeführt wird, den Proxyserver auf dem angegebenen Port mit Tools wie
ping,telnetodernetcaterreichen kann.
bash telnet your.proxy.server 8080
Eine erfolgreichetelnet-Verbindung zeigt eine grundlegende Netzwerk-Erreichbarkeit an.
Vergleich der wichtigsten Proxy-Optionen
| cURL-Option | Beschreibung | Protokolle | Authentifizierung | DNS-Auflösung |
|---|---|---|---|---|
-x, --proxy |
Generische Proxy-Spezifikation (HTTP/HTTPS-Proxy) | HTTP, HTTPS | Ja | Lokal |
--proxy-user |
Gibt Benutzername und Passwort für die Proxy-Authentifizierung an | HTTP, HTTPS | Ja | N/A |
--socks5 |
SOCKS5-Proxy, standardmäßig lokale DNS-Auflösung | Alle | Ja | Lokal |
--socks5-hostname |
SOCKS5-Proxy, Remote-DNS-Auflösung | Alle | Ja | Remote (Proxy) |
--socks4 |
SOCKS4-Proxy, lokale DNS-Auflösung | Alle | Nein | Lokal |
--socks4a |
SOCKS4a-Proxy, Remote-DNS-Auflösung | Alle | Nein | Remote (Proxy) |
http_proxy (env) |
Umgebungsvariable für HTTP-Proxy | HTTP | Ja | Lokal |
https_proxy (env) |
Umgebungsvariable für HTTPS-Proxy (oft ein HTTP-Proxy für Tunneling) | HTTPS | Ja | Lokal |
all_proxy (env) |
Umgebungsvariable für alle Protokolle, falls andere nicht gesetzt sind | Alle | Ja | Lokal |
no_proxy (env) |
Umgebungsvariable zur Angabe von Hosts, die den Proxy umgehen sollen | N/A | N/A | N/A |