Leitfaden
Proxy mit cURL nutzen: Befehlsbeispiele für HTTP, HTTPS und SOCKS5
In cURL wird der Proxy mit dem Parameter -x angegeben, die Zugangsdaten stehen in der URL oder werden mit -U übergeben. HTTPS-Anfragen über einen HTTP-Proxy, der Unterschied zwischen socks5 und socks5h, Umgebungsvariablen und .curlrc, Ausgangs-IP und Zeitmessung, Windows-Befehle und häufige cURL-Proxy-Fehler.
Das Wichtigste in Kürze
- In cURL wird der Proxy mit -x (--proxy) angegeben: curl -x "http://USER:[email protected]:8989" https://api.ipify.org; die Zugangsdaten können in der URL stehen oder separat mit -U "USER:PASSWORD" übergeben werden.
- Auch wenn die Zielseite HTTPS nutzt, beginnt die Adresse eines HTTP-Proxys mit http://; cURL schickt CONNECT an den Proxy, und TLS wird innerhalb des Tunnels aufgebaut. Das Schema https:// bedeutet, dass cURL auch mit dem Proxy-Server selbst TLS spricht.
- Bei SOCKS5 löst socks5:// den Domainnamen lokal auf, socks5h:// auf der Proxy-Seite; damit DNS-Anfragen das lokale Netzwerk nicht verlassen, verwenden Sie socks5h:// oder --socks5-hostname.
- Für HTTP liest cURL nur die kleingeschriebene Variable http_proxy; HTTPS_PROXY, ALL_PROXY und NO_PROXY werden ebenfalls unterstützt. Ein -x auf der Kommandozeile überschreibt die Umgebungsvariable.
- In Windows PowerShell 5.1 ist curl ein Alias für Invoke-WebRequest; schreiben Sie in Proxy-Befehlen curl.exe und setzen Sie die Adresse in cmd.exe in doppelte Anführungszeichen.
Um in cURL einen Proxy zu nutzen, ergänzen Sie die Anfrage um den Parameter -x (Langform --proxy) und die Proxy-Adresse: curl -x "http://USER:[email protected]:8989" https://api.ipify.org. Für einen HTTP-Proxy schreiben Sie die Adresse mit dem Schema http://, für einen SOCKS5-Proxy mit socks5h://; dass die Zielseite HTTPS verwendet, ändert an der Proxy-Adresse nichts.
Derselbe Befehl funktioniert unter Linux, macOS und Windows. Ist die zurückgegebene IP-Adresse die Ausgangs-IP des Proxys, sind Verbindung, Authentifizierung und Tunnel korrekt eingerichtet. In den Beispielen wird die WeProxy-Gateway-Adresse gw.weproxy.com.tr:8989 verwendet; USER und PASSWORD sind Ihre Zugangsdaten aus dem Kundenpanel.
Wie richtet man einen Proxy in cURL ein? Die Parameter -x und -U
Der Parameter -x erwartet die Proxy-Adresse in der Form [schema://][benutzer:passwort@]host[:port]. Die Zugangsdaten können Sie in die Adresse schreiben oder separat mit -U (--proxy-user) übergeben:
curl -x "http://USER:[email protected]:8989" https://api.ipify.org
curl -x "http://gw.weproxy.com.tr:8989" -U "USER:PASSWORD" https://api.ipify.org
Beide Befehle senden dieselbe Anfrage, solange das Passwort keine Sonderzeichen enthält. Kommt in einem Passwort innerhalb der URL ein @, :, # oder % vor, muss es prozentkodiert werden (@ → %40). -U teilt den Wert dagegen am ersten :; solange der Benutzername kein : enthält, schreiben Sie das Passwort unkodiert so, wie es ist. Die Kodierungsregeln und weitere Zeilenformate erklärt der Leitfaden zu Proxy-Formaten.
Laut der cURL-Dokumentation gilt eine Adresse ohne Schema im Wert von -x als HTTP-Proxy, und ohne Portangabe wird 1080 verwendet. Das WeProxy-Gateway lauscht auf einem anderen Port, schreiben Sie den Port also in jedem Befehl aus. Wird der Proxy per IP-Whitelist autorisiert, brauchen Sie keine Zugangsdaten: curl -x "http://gw.weproxy.com.tr:8989" https://api.ipify.org genügt. Welches WeProxy-Produkt welche Methode unterstützt, listet der Leitfaden zur Proxy-Authentifizierung pro Produkt auf.
Ein Passwort auf der Kommandozeile kann in der Shell-History und in der Prozessliste des Systems landen. Auf gemeinsam genutzten Servern lesen Sie es besser aus einer Umgebungsvariablen:
export PROXY_PASS='PASSWORD'
curl -x "http://gw.weproxy.com.tr:8989" -U "USER:$PROXY_PASS" https://api.ipify.org
Wie sendet man mit cURL eine HTTPS-Anfrage über einen HTTP-Proxy?
Rufen Sie eine HTTPS-Seite über einen HTTP-Proxy auf, beginnt die Proxy-Adresse trotzdem mit http://. cURL schickt zuerst die Anfrage CONNECT api.ipify.org:443 an den Proxy. Antwortet der Proxy mit 200, wird die TLS-Verbindung innerhalb dieses Tunnels direkt mit der Zielseite aufgebaut. Zertifikat und Seiteninhalt des Ziels bekommt der Proxy nicht zu sehen; er weiß nur, mit welchem Host und Port Sie sich verbinden.
Beginnt das Ziel mit http://, öffnet cURL keinen Tunnel. Die Anfrage geht mit der vollständigen URL an den Proxy, und der Proxy ruft das Ziel selbst ab. Wollen Sie auch eine einfache HTTP-Anfrage durch den Tunnel leiten, ergänzen Sie -p (--proxytunnel):
curl -p -x "http://USER:[email protected]:8989" http://example.com
Mit -v sehen Sie, was tatsächlich gesendet wird. Zeilen mit > am Anfang sind ausgehende, Zeilen mit < eingehende Daten. Ein gekürztes Beispiel (die Details hängen von der cURL-Version ab):
> CONNECT api.ipify.org:443 HTTP/1.1
> Proxy-Authorization: Basic ...
< HTTP/1.1 200 Connection established
* CONNECT tunnel established, response 200
> GET / HTTP/2
< HTTP/2 200
Die erste <-Zeile ist die Antwort des Proxys, die folgenden <-Zeilen kommen von der Zielseite. Antwortet der Proxy auf CONNECT mit 407, liegt das Problem bei den Zugangsdaten. Steht der Tunnel mit 200 und das Ziel gibt 403 oder 429 zurück, funktioniert der Proxy, und die Ablehnung kommt von der Zielseite.
Mit https:// vor der Proxy-Adresse spricht cURL auch mit dem Proxy-Server selbst TLS (HTTPS-Proxy). Bietet der Proxy das nicht an, scheitert der Handshake, und Sie erhalten curl: (35). Für einen Header, der nur an den Proxy gehen soll, verwenden Sie --proxy-header statt -H; mit -H landet der Header bei der Zielseite.
Wie nutzt man einen SOCKS5-Proxy mit cURL? Der Unterschied zwischen socks5 und socks5h
Bei SOCKS5 ändert sich nur das Schema. cURL kennt zwei Varianten:
curl -x "socks5://USER:[email protected]:8989" https://api.ipify.org
curl -x "socks5h://USER:[email protected]:8989" https://api.ipify.org
socks5:// löst den Domainnamen des Ziels auf Ihrem Rechner auf und schickt dem Proxy die IP-Adresse. socks5h:// reicht den Domainnamen unverändert an den Proxy weiter, die DNS-Auflösung findet auf der Proxy-Seite statt. Mit dem zweiten Schema verlassen Ihre DNS-Anfragen das lokale Netzwerk nicht, und das Ziel wird passend zum Land des Proxys aufgelöst. Wenn Sie länderspezifische Inhalte abrufen oder DNS-Leaks schließen wollen, nehmen Sie socks5h://. Wie sich ein Leak messen lässt, beschreibt der DNS-Leak-Leitfaden.
In älteren Befehlen tauchen dafür eigene Parameter auf: --socks5 entspricht socks5:// mit lokaler Auflösung, --socks5-hostname entspricht socks5h://. Bei diesen Parametern übergeben Sie die Zugangsdaten mit -U:
curl --socks5-hostname "gw.weproxy.com.tr:8989" -U "USER:PASSWORD" https://api.ipify.org
Die meisten WeProxy-Produkte bieten HTTP und SOCKS5 gemeinsam an. Mobile Proxy-Endpunkte unterstützen nur HTTP; geben Sie dieses Produkt mit socks5:// an, kommt keine Verbindung zustande. Welches Protokoll zu welcher Aufgabe passt, vergleicht der Artikel HTTP vs. SOCKS5.
cURL-Proxy-Parameter im Vergleich
| Parameter | Funktion | Beispiel |
|---|---|---|
-x, --proxy | Gibt Proxy-Adresse und Protokoll an | -x "http://gw.weproxy.com.tr:8989" |
-U, --proxy-user | Benutzername und Passwort für den Proxy | -U "USER:PASSWORD" |
-p, --proxytunnel | Schickt auch einfache HTTP-Anfragen durch einen CONNECT-Tunnel | -p -x ... http://example.com |
--socks5-hostname | SOCKS5, DNS auf dem Proxy (wie socks5h://) | --socks5-hostname gw.weproxy.com.tr:8989 |
--socks5 | SOCKS5, DNS lokal (wie socks5://) | --socks5 gw.weproxy.com.tr:8989 |
--proxy-header | Header, der nur an den Proxy geht | --proxy-header "X-Test: 1" |
--noproxy | Hosts, die ohne Proxy aufgerufen werden | --noproxy "localhost,127.0.0.1" |
--connect-timeout | Zeitlimit für den Verbindungsaufbau (Sekunden) | --connect-timeout 10 |
-m, --max-time | Zeitlimit für den gesamten Vorgang (Sekunden) | -m 30 |
Stehen in einem Befehl sowohl -x als auch --socks5, gilt die zuletzt genannte Option. Bleiben Sie bei einer Methode, damit nichts durcheinandergerät; in Skripten liest sich -x mit einer URL samt Schema am leichtesten.
cURL-Proxy dauerhaft einstellen: Umgebungsvariablen und .curlrc
Wenn Sie nicht in jeden Befehl -x schreiben wollen, setzen Sie die Umgebungsvariablen, die cURL ausliest:
export http_proxy="http://USER:[email protected]:8989"
export HTTPS_PROXY="http://USER:[email protected]:8989"
export NO_PROXY="localhost,127.0.0.1"
curl https://api.ipify.org
Für HTTP-Anfragen liest cURL nur die kleingeschriebene Variable http_proxy; das großgeschriebene HTTP_PROXY wird aus Sicherheitsgründen ignoriert. Für HTTPS funktioniert HTTPS_PROXY oder https_proxy, für alle Protokolle ALL_PROXY. Hosts aus der Liste NO_PROXY werden ohne Proxy aufgerufen. Ein -x auf der Kommandozeile überschreibt die Umgebungsvariable, --noproxy "*" schaltet den Proxy für diese eine Anfrage komplett ab.
Dieselbe Einstellung können Sie auch in eine benutzerbezogene Konfigurationsdatei schreiben, unter Linux und macOS ~/.curlrc:
proxy = "http://gw.weproxy.com.tr:8989"
proxy-user = "USER:PASSWORD"
Unter Windows sucht cURL die Datei im Benutzerordner (%USERPROFILE% oder %APPDATA%) unter dem Namen .curlrc oder _curlrc. Steht -q als erstes Argument im Befehl, liest cURL diese Datei nicht. Läuft ein Skript unerwartet über einen Proxy, sehen Sie zuerst in den Umgebungsvariablen und in der Datei .curlrc nach.
Wie prüft man die Ausgangs-IP eines Proxys mit cURL?
Am schnellsten geht es mit einer Anfrage über den Proxy an einen Dienst, der Ihre IP-Adresse als reinen Text zurückgibt:
curl -s -x "http://USER:[email protected]:8989" "https://api.ipify.org?format=json"
Kommt Ihre eigene IP zurück, ist die Anfrage nicht über den Proxy gelaufen. Kontrollieren Sie dann den Wert von NO_PROXY, die Adresse in -x und ob tatsächlich diese Zeile ausgeführt wurde. Land, Stadt und Netz der IP zeigt das Tool IP Lookup, wenn Sie die Adresse dort einfügen; die Ausgangs-IP Ihres Browsers mit Proxy sehen Sie unter My IP.
Um zu testen, wie ein Rotating-Gateway wechselt, führen Sie denselben Befehl mehrmals hintereinander aus. Jeder curl-Aufruf öffnet eine neue Verbindung, bei einem Pool mit Rotation pro Anfrage steht deshalb in jeder Zeile eine andere IP:
for i in 1 2 3 4 5; do
curl -s -x "http://USER:[email protected]:8989" https://api.ipify.org
echo
done
Haben Sie aus dem Panel eine Liste im Format host:port:user:pass, zeigt eine kurze Bash-Schleife, die jede Zeile einzeln testet, welcher Proxy funktioniert:
while IFS=: read -r host port user pass; do
printf '%s:%s -> ' "$host" "$port"
curl -s -m 15 -x "http://$host:$port" -U "$user:$pass" https://api.ipify.org || printf 'FEHLER'
echo
done < proxies.txt
read gibt der letzten Variablen den Rest der Zeile; enthält das Passwort ein :, bleibt es in pass trotzdem vollständig. Weil -U verwendet wird, entfällt auch die Prozentkodierung. -m 15 sorgt dafür, dass eine Zeile ohne Antwort die Schleife nicht blockiert.
Müssen Sie dieselbe IP eine Weile behalten (Login, Warenkorb, mehrstufiges Formular), hängen Sie in den Residential- und Mobile-Pools von WeProxy eine Session-ID an den Benutzernamen an. Im Residential-Pool lässt sich dieselbe Ausgangs-IP bis zu 24 Stunden halten, im Mobile-Pool bis zu 60 Minuten. Das genaue Format des Benutzernamens unterscheidet sich je nach Produkt. Kopieren Sie ihn deshalb aus dem Panel und prüfen Sie mit der Schleife oben, ob dieselbe IP zurückkommt. Welche Aufgabe eine feste und welche eine rotierende IP braucht, erklärt der Leitfaden zu Sticky- und Rotating-Proxys anhand typischer Szenarien.
Wo die Verbindung Zeit verliert, sehen Sie, wenn Sie mit -w Zeitmessungen ausgeben:
curl -s -o /dev/null -x "http://USER:[email protected]:8989" \
-w "connect=%{http_connect} http=%{http_code} tcp=%{time_connect}s tls=%{time_appconnect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n" \
https://api.ipify.org
%{http_connect} liefert die CONNECT-Antwort des Proxys, %{http_code} die Antwort der Zielseite. time_connect markiert den Moment, in dem die TCP-Verbindung zum Proxy steht, time_appconnect das Ende des TLS-Handshakes mit dem Ziel. Ist die Gesamtzeit hoch, time_connect aber niedrig, erreichen Sie den Proxy schnell, und die Verzögerung liegt hinter dem Tunnel oder bei der Zielseite. Eine einzelne Zeile können Sie unabhängig vom Code auch im Proxy Checker testen.
cURL mit Proxy unter Windows nutzen
Unter Windows 10 und 11 ist curl.exe bereits im System enthalten. In Windows PowerShell 5.1 startet die Eingabe curl allerdings den Befehl Invoke-WebRequest, der ganz andere Parameter erwartet. Schreiben Sie in PowerShell deshalb immer curl.exe:
curl.exe -x "http://USER:[email protected]:8989" https://api.ipify.org
In der Eingabeaufforderung (cmd.exe) zählen einfache Anführungszeichen nicht als Anführungszeichen. Setzen Sie die Adresse in doppelte Anführungszeichen. Als Zeichen für die Zeilenfortsetzung dient in cmd.exe ^ und in PowerShell der Backtick, nicht \ wie in Bash. Auch Umgebungsvariablen setzen Sie je nach Shell anders:
# PowerShell
$env:HTTPS_PROXY = "http://USER:[email protected]:8989"
curl.exe https://api.ipify.org
:: cmd.exe
set HTTPS_PROXY=http://USER:[email protected]:8989
curl https://api.ipify.org
Enthält das Passwort %, ^ oder &, interpretiert cmd.exe diese Zeichen selbst. Übergeben Sie ein solches Passwort mit -U in doppelten Anführungszeichen oder schreiben Sie es prozentkodiert in die URL. Die System-Proxy-Einstellung von Windows liest cURL nicht aus; wie Sie den Proxy systemweit einrichten, zeigt die Seite zur Windows-Integration.
cURL-Proxy-Fehler und ihre Lösungen
Meldet cURL einen Fehler, verrät die Zahl am Zeilenanfang (der Exit-Code), in welcher Phase das Problem liegt:
| Fehler | Bedeutung | Lösung |
|---|---|---|
curl: (5) Could not resolve proxy | Proxy-Hostname konnte nicht aufgelöst werden | Gateway-Namen und lokales DNS prüfen |
curl: (7) Failed to connect | Proxy-Port nicht erreichbar | Port ausdrücklich angeben, Firewall prüfen |
curl: (56) CONNECT tunnel failed, response 407 | Proxy hat die Zugangsdaten nicht akzeptiert | Benutzername, Passwort und Prozentkodierung prüfen |
curl: (35) TLS-Fehler | Proxy mit https:// angegeben oder Tunnel nicht aufgebaut | Proxy-Schema auf http:// ändern |
curl: (97) | SOCKS-Handshake fehlgeschlagen | SOCKS5-Unterstützung des Produkts und Zugangsdaten prüfen |
curl: (28) | Zeitüberschreitung | --connect-timeout und -m getrennt setzen, erneut versuchen |
| Ihre eigene IP kommt zurück | Anfrage ging nicht an den Proxy | NO_PROXY, .curlrc und den Wert von -x prüfen |
Bei vorübergehenden Netzwerkfehlern wiederholt cURL die Anfrage automatisch, wenn Sie --retry 3 --retry-delay 2 ergänzen. --retry greift nur bei Fehlern, die als vorübergehend gelten; einen dauerhaften Fehler wie 407 noch einmal zu versuchen, ändert am Ergebnis nichts. Aus welcher Schicht ein Statuscode kommt und wo Sie jeweils zuerst nachsehen sollten, erklärt der Artikel Proxy-Fehlercodes im Überblick ausführlich. Wenn Sie dieselben Anfragen später aus Code senden, verwenden die Beispiele im Artikel Proxy in Python nutzen dasselbe Adressformat.
Schicken Sie mit cURL viele Anfragen, halten Sie sich an die Nutzungsbedingungen der Zielseite und an die Datei robots.txt; erheben Sie personenbezogene Daten, gelten die Pflichten aus der DSGVO. Welche Nutzung bei WeProxy-Diensten erlaubt ist, steht auf der Seite Acceptable Use. Pakete mit neuer IP bei jeder Anfrage finden Sie auf der Seite Rotating Residential Proxy, Pakete mit fester Ausgangsadresse unter statische Datacenter-IPv4.
Häufige Fragen
Wie richte ich einen Proxy in cURL ein?
Ergänzen Sie die Anfrage mit -x um die Proxy-Adresse: curl -x "http://USER:[email protected]:8989" https://api.ipify.org. Wollen Sie die Zugangsdaten separat übergeben, schreiben Sie -x "http://gw.weproxy.com.tr:8989" -U "USER:PASSWORD". Ohne Schema behandelt cURL die Adresse als HTTP-Proxy, ohne Port nimmt es 1080; geben Sie den Port deshalb immer ausdrücklich an. Kommt die Ausgangs-IP des Proxys zurück, stimmt die Einstellung.
Schreibe ich die Proxy-Adresse für HTTPS-Seiten mit https://?
Nein, in den meisten Fällen mit http://. Das Schema beschreibt das Protokoll des Proxy-Servers, nicht das der Zielseite. Für HTTPS-Ziele schickt cURL eine CONNECT-Anfrage an den Proxy und baut die TLS-Verbindung zum Ziel innerhalb dieses Tunnels auf. Mit https:// spricht cURL auch mit dem Proxy selbst TLS; bietet der Proxy das nicht an, erhalten Sie den Fehler curl: (35).
Was ist der Unterschied zwischen socks5 und socks5h in cURL?
Beide verbinden sich mit demselben SOCKS5-Proxy; der Unterschied liegt in der DNS-Auflösung. socks5:// oder --socks5 löst den Domainnamen des Ziels auf Ihrem Rechner auf und schickt dem Proxy die IP-Adresse. socks5h:// oder --socks5-hostname reicht den Domainnamen an den Proxy weiter, aufgelöst wird auf der Proxy-Seite. So verlassen DNS-Anfragen das lokale Netzwerk nicht, und das Ziel wird passend zum Proxy-Standort aufgelöst.
Warum bekomme ich in cURL den Fehler 407?
Die Meldung curl: (56) CONNECT tunnel failed, response 407 bedeutet, dass der Proxy Ihre Zugangsdaten nicht akzeptiert hat. Kopieren Sie Benutzername und Passwort erneut aus dem Panel. Enthält das Passwort Zeichen wie @, : oder %, schreiben Sie es in der URL prozentkodiert oder übergeben Sie die Zugangsdaten separat mit -U "USER:PASSWORD". Nutzen Sie eine IP-Whitelist, prüfen Sie, ob die IP, von der die Anfrage kommt, im Panel eingetragen ist.
Wie nutze ich einen Proxy, ohne ihn in jeden cURL-Befehl zu schreiben?
Setzen Sie eine Umgebungsvariable: unter Linux und macOS export HTTPS_PROXY="http://USER:[email protected]:8989", in PowerShell $env:HTTPS_PROXY. Für HTTP-Anfragen ist das kleingeschriebene http_proxy nötig. Für eine dauerhafte Einstellung tragen Sie die Zeilen proxy und proxy-user in die Datei ~/.curlrc ein. Mit NO_PROXY nehmen Sie bestimmte Hosts aus, mit --noproxy "*" schalten Sie den Proxy für eine einzelne Anfrage ab.









