wget ist ein unter Linux und macOS meist vorinstalliertes Kommandozeilenwerkzeug zum Herunterladen von Dateien und Abrufen von Webseiten. Es wird häufig genutzt, um auf Servern per Skript Dateien herunterzuladen, eine Website zu spiegeln oder einen einfachen Erreichbarkeitstest durchzuführen. In diesem Beitrag erklären wir drei Wege, wget über einen Proxy laufen zu lassen, die Authentifizierung, HTTPS-Details, worauf bei Massendownloads zu achten ist, und häufig auftretende Fehler mit Beispielbefehlen.
Alle beschriebenen Optionen sind im GNU-Wget-Handbuch dokumentiert.
Vor dem Start: ist wget installiert?
Prüfen Sie die Version im Terminal:
wget --versionWird der Befehl nicht gefunden, können Sie unter Debian und Ubuntu sudo apt install wget, unter macOS mit Homebrew brew install wget nutzen. Unter Windows ist wget nicht vorinstalliert; für dieselben Aufgaben können Sie das ab Windows 10 mitgelieferte curl.exe verwenden. Die wget-Schreibweise in PowerShell ist dagegen kein echtes wget, sondern ein Alias für den Befehl Invoke-WebRequest, und akzeptiert die in diesem Beitrag genannten Optionen nicht.
Bei Tests erleichtert eine Testadresse, die Ihre IP-Adresse zurückgibt, die Arbeit. Funktioniert der Proxy, zeigt diese Adresse nicht Ihre eigene, sondern die IP des Proxys:
wget -qO- https://httpbin.org/ip-q unterdrückt hier die Ausgabe, -O- gibt den heruntergeladenen Inhalt statt in eine Datei auf dem Bildschirm aus. Führen Sie den Befehl einmal ohne Proxy aus und notieren Sie Ihre eigene IP; bei folgenden Versuchen sehen Sie den Unterschied sofort.
Das Format der Proxy-Adresse
In allen drei Methoden wird der Proxy im gleichen Format angegeben:
http://benutzer:passwort@server:port- Das Schema
http://ist das Protokoll der Verbindung zum Proxy. Auch bei HTTPS-Websites wird dieses Schema verwendet; warum, erklären wir weiter unten. - Der Teil
benutzer:passwort@ist optional. Haben Sie über Ihr Proxy-Panel die IP Ihres Servers autorisiert, können Sie diesen Teil ganz weglassen. - Die Angabe
server:porthängt von Ihrem Paket ab; die richtigen Werte finden Sie in Ihrem Kundenpanel.
Methode 1: mit Umgebungsvariablen
wget liest die üblichen Proxy-Umgebungsvariablen des Systems: http_proxy, https_proxy, ftp_proxy und no_proxy. Das ist die schnellste Methode, und viele andere im selben Terminal laufende Tools nutzen dieselben Variablen.
export http_proxy="http://benutzer:passwort@pr.proxynet.io:8000"
export https_proxy="http://benutzer:passwort@pr.proxynet.io:8000"
wget -qO- https://httpbin.org/ipDrei Punkte sind zu beachten:
- Auch der Wert von
https_proxybeginnt mithttp://. Diese Variable gibt den beim Zugriff auf HTTPS-Websites zu nutzenden Proxy an; die Verbindung zum Proxy selbst ist HTTP, und der HTTPS-Traffic wird innerhalb dieser Verbindung getunnelt. - Die Variablen gelten nur in dieser Terminalsitzung. Sollen sie dauerhaft gelten, fügen Sie sie zu
~/.bashrcoder~/.zshrchinzu. - Bevorzugen Sie Kleinschreibung. wget liest die kleingeschriebenen Variablen; auf manchen Systemen kann auch großgeschriebenes
HTTP_PROXYdefiniert sein, und widersprechen sich beide Definitionen, stiftet das Verwirrung. Am sichersten ist es, beide auf denselben Wert zu setzen.
Sollen bestimmte Adressen nicht über den Proxy gehen, nutzen Sie no_proxy:
export no_proxy="localhost,127.0.0.1,.ihrefirma.local"Diese Variable verhindert, dass Dienste im internen Netz oder lokale Entwicklungsserver über den Proxy laufen. Ein mit einem Punkt beginnender Domainname umfasst alle Subdomains dieser Domain.
Methode 2: in der Befehlszeile, einmalig
Um ohne Änderung der Umgebungsvariablen nur einen einzelnen Befehl über den Proxy zu leiten, können Sie mit der Option -e (--execute) wget-Einstellungen direkt im Befehl übergeben:
wget -e use_proxy=yes \
-e https_proxy=http://pr.proxynet.io:8000 \
--proxy-user=benutzer \
--proxy-password=passwort \
https://httpbin.org/ip -O -Diese Methode ist besonders in Skripten nützlich: Die Proxy-Einstellung beeinflusst keine anderen Befehle, und Sie können bei jedem Aufruf einen anderen Proxy angeben. Wollen Sie zum Beispiel in einer Schleife jeden Download über einen anderen Ausgangspunkt laufen lassen, beziehen Sie den Wert für -e https_proxy= aus der Schleifenvariable.
Jede mit -e angegebene Zeile ist eine Einstellung, die auch in die Datei .wgetrc geschrieben werden kann. Das heißt, jeder Schlüssel, den Sie in der folgenden Methode sehen, gilt auch hier.
Methode 3: dauerhaft mit der Datei .wgetrc
Nutzen Sie wget auf derselben Maschine dauerhaft mit einem Proxy, können Sie die Einstellungen in die Datei ~/.wgetrc in Ihrem Nutzerverzeichnis schreiben:
use_proxy = on
http_proxy = http://pr.proxynet.io:8000
https_proxy = http://pr.proxynet.io:8000
proxy_user = benutzer
proxy_password = passwortDa die Datei ein Passwort enthält, schränken Sie die Rechte so ein, dass nur Sie sie lesen können:
chmod 600 ~/.wgetrcIst eine systemweite Einstellung nötig, können dieselben Zeilen in die Datei /etc/wgetrc geschrieben werden; die Datei im Nutzerverzeichnis überschreibt dabei die Werte der Systemdatei.
Wollen Sie den Proxy bei bestehender Datei vorübergehend deaktivieren, fügen Sie für einen einzelnen Befehl die Option --no-proxy hinzu:
wget --no-proxy https://httpbin.org/ip -O -Welche Methode sollte man wählen?
| Situation | Empfohlene Methode |
|---|---|
| Schneller Test im Terminal | Umgebungsvariable |
| Im Skript, bei jedem Aufruf ein anderer Proxy | Befehlszeile mit -e |
| Dauerhafte Proxy-Nutzung auf dem Server | .wgetrc |
| Bestimmte Adressen vom Proxy ausnehmen | no_proxy |
| Geplanter Download per Cron | .wgetrc (Cron überträgt keine Umgebungsvariablen) |
| Innerhalb eines Docker-Containers | Umgebungsvariable (über ENV) |
Sind alle drei Methoden gleichzeitig definiert, gilt folgende Rangfolge: Befehlszeilenoptionen überschreiben Umgebungsvariablen, Umgebungsvariablen überschreiben die Datei .wgetrc.
Wie funktioniert der Proxy bei HTTPS-Websites?
Beim Zugriff auf eine HTTPS-Adresse über einen Proxy sendet wget dem Proxy zunächst eine CONNECT ziel:443-Anfrage. Der Proxy öffnet eine TCP-Verbindung zum Ziel und überträgt danach nur noch verschlüsselte Bytes. Der Proxy sieht also nicht den Inhalt der Website, sondern nur, mit welchem Domainnamen sich verbunden wird.
Die praktische Folge: Auch wenn die Proxy-Adresse mit http:// beginnt, können Sie sicher HTTPS-Websites ansteuern. Die Zertifikatsprüfung erfolgt zwischen Ihrer Maschine und der Zielseite, der Proxy ist daran nicht beteiligt. Dieses Verhalten des Proxys und den Unterschied zu SOCKS haben wir in unserem Beitrag SOCKS und HTTP Proxy im Vergleich verglichen.
In Kombination mit häufig genutzten Optionen
Die Proxy-Einstellung allein reicht in der Praxis selten aus; für echte Aufgaben braucht es meist einige Optionen mehr. Das folgende Beispiel lädt eine Datei über den Proxy mit Wiederholungs- und Timeout-Einstellungen herunter:
wget --timeout=30 --tries=3 --waitretry=5 \
--user-agent="Mozilla/5.0 (X11; Linux x86_64)" \
-O bericht.pdf https://example.com/bericht.pdf--timeoutbegrenzt die Wartezeit für jeden Netzwerkvorgang.--trieslegt fest, wie oft ein fehlgeschlagener Download wiederholt wird;--waitretryfügt zwischen den Versuchen eine Wartezeit ein.--user-agentändert die Browserkennung. wgets Standardkennung wird auf manchen Websites direkt blockiert; ein aussagekräftiger Wert ist sowohl transparenter als auch weniger problematisch.-Obenennt die Ausgabedatei; mit-cwird ein unterbrochener Download an der Stelle fortgesetzt, an der er abgebrochen wurde.
Brauchen Sie beim Abrufen der Seite Cookies, halten die Optionen --load-cookies und --save-cookies die Sitzung in einer Datei fest; so lässt sich eine angemeldete Sitzung zusammen mit dem Proxy fortsetzen.
Unterstützt wget SOCKS-Proxy?
GNU Wget hat keine eingebaute SOCKS-Unterstützung; alle oben genannten Methoden sind für HTTP- und HTTPS-Proxy gedacht. Brauchen Sie SOCKS5, haben Sie zwei Optionen:
- cURL nutzen. cURL unterstützt die Schemata
socks5://undsocks5h://direkt und kann fast alles, was wget kann. Details in unserem Beitrag Wie nutzt man einen Proxy mit cURL?. - Ein Umleitungstool nutzen. Unter Linux können Tools wie
proxychainsdie Verbindungen von Programmen ohne SOCKS-Unterstützung zum SOCKS-Proxy umleiten. Unter Windows erledigt das Proxifier.
Für mit wget direkt funktionierende Pakete lohnt sich ein Blick auf die Seite HTTPS-Proxy.
Häufige Fehler und ihre Lösungen
"407 Proxy Authentication Required"
Die Proxy-Zugangsdaten fehlen oder sind falsch. Prüfen Sie Benutzername und Passwort. Enthält das Passwort Sonderzeichen wie @, : oder #, kodieren Sie diese in der Adresse mit Prozentkodierung (@ wird zu %40), oder nutzen Sie die Optionen --proxy-user und --proxy-password; diese Optionen erfordern keine Kodierung.
Der Befehl nutzt den Proxy überhaupt nicht
- Stellen Sie sicher, dass Sie die Variable mit
exportdefiniert haben; nurhttp_proxy=...zu schreiben, überträgt sie nicht an Unterprozesse. - Gehen Sie an eine HTTPS-Adresse, muss nicht
http_proxy, sondernhttps_proxydefiniert sein. - Prüfen Sie, ob in
.wgetrceine Zeileuse_proxy = offsteht. - Führen Sie
sudo wgetaus, überträgtsudostandardmäßig möglicherweise nicht Ihre Umgebungsvariablen; nutzen Siesudo -E, um sie zu übertragen, oder schreiben Sie die Einstellung in/etc/wgetrc. - Die Zieladresse könnte mit einer Domain in der
no_proxy-Liste übereinstimmen.
"Unable to establish SSL connection"
Prüfen Sie zunächst, ob sich die Zieladresse ohne Proxy öffnen lässt. Liegt das Problem am Zertifikat, überspringt die Option --no-check-certificate die Prüfung; diese Option schwächt jedoch die Sicherheit der Verbindung und sollte nur zu Testzwecken genutzt werden. Denken Sie daran, dass der Proxy an der Zertifikatsprüfung nicht beteiligt ist: Dieser Fehler stammt meist von einem veralteten Root-Zertifikatsspeicher im System oder von der Konfiguration der Zielseite.
Die Verbindung läuft in ein Timeout
Prüfen Sie Proxy-Adresse und Port erneut. Stellen Sie sicher, dass die Firewall Traffic zum Proxy-Port zulässt. Bei langen Downloads verhindert es, dass Skripte hängen bleiben, wenn Sie Timeout und Wiederholungsanzahl explizit festlegen:
wget --timeout=30 --tries=3 https://httpbin.org/ip -O -"ERROR 403: Forbidden"
Die Zielseite lehnt die Anfrage ab. Die Ursache muss nicht der Proxy sein; wgets Standard-User-Agent wird auf manchen Websites direkt blockiert. Geben Sie mit --user-agent einen aussagekräftigen Wert an. Besteht das Problem weiter, könnte sich die Zielseite je nach IP-Typ des Proxys unterschiedlich verhalten; warum Rechenzentrumsadressen häufiger abgelehnt werden, haben wir in Residential- und Datacenter-Proxy im Vergleich erklärt.
Worauf bei Massendownloads zu achten ist
Die Option -r (rekursiver Download) von wget kann eine ganze Website mit einem einzigen Befehl herunterladen. Diese Kraft kann den Zielserver stark belasten. Bei Massendownloads sind folgende Optionen sowohl für Sie als auch für das Ziel von Vorteil:
wget -r -l 2 --wait=2 --random-wait --limit-rate=500k \
--no-parent -A pdf https://example.com/dokumente/-l 2begrenzt die Tiefe auf zwei Ebenen; unbegrenzte Tiefe lädt die gesamte Website herunter.--wait=2fügt zwischen Anfragen zwei Sekunden ein,--random-waitvariiert diese Zeit zufällig.--limit-rate=500kbegrenzt die Downloadgeschwindigkeit.--no-parentverhindert das Aufsteigen in übergeordnete Verzeichnisse,-A pdflädt nur die angegebene Dateiendung.
wget folgt standardmäßig den Regeln der robots.txt; deaktivieren Sie dieses Verhalten nicht. Welche Daten unter welchen Bedingungen erfasst werden dürfen, haben wir in Ist Web Scraping legal? erklärt.
Bei Projekten mit vielen Anfragen senkt es sowohl das Sperrungsrisiko als auch die Last der Zielseite, statt den Traffic auf eine einzige IP zu häufen, mit Rotierender Proxy die Adressen zu verteilen. Für umfangreichere Bedürfnisse können Sie sich unsere Datenerfassungslösungen ansehen.
Häufig gestellte Fragen
wget oder cURL?
Für Dateidownload, Spiegelung und rekursiven Abruf ist wget praktischer; für API-Anfragen, spezielle HTTP-Methoden und SOCKS-Proxy ist cURL leistungsfähiger. Beide lesen HTTP-Proxy aus denselben Umgebungsvariablen; eine einmal definierte Einstellung funktioniert also in beiden Tools.
Beeinflusst die Proxy-Einstellung andere Programme?
Ein per Umgebungsvariable definierter Proxy beeinflusst jedes Programm, das aus derselben Shell gestartet wird und diese Variablen liest (cURL, pip, git und andere). Die Methoden .wgetrc und -e beeinflussen nur wget.
Kann ich einen Proxy nutzen, ohne mein Passwort zu speichern?
Ja. Autorisieren Sie über das Panel Ihres Proxy-Anbieters die IP-Adresse Ihres Servers, sind Benutzername und Passwort nicht nötig; die Adresse wird dann nur im Format http://server:port geschrieben. Für Server mit fester IP ist das der sauberste Weg.
Kann ich mit wget bei jeder Anfrage eine andere IP erhalten?
wget selbst rotiert nicht. Es gibt zwei Wege: einen Rotating-Proxy nutzen (eine Adresse, bei jeder Verbindung eine andere ausgehende IP) oder in einem Skript bei jedem Aufruf mit -e https_proxy= einen anderen Proxy angeben.
Kann ich per Proxy per FTP herunterladen?
Ist die Variable ftp_proxy definiert, ruft wget FTP-Adressen über den HTTP-Proxy ab; der Proxy muss diese Nutzung unterstützen. Da FTP-Quellen heute seltener werden, konzentrieren sich die meisten Proxy-Pakete auf HTTP und HTTPS.
Fazit
Es gibt drei Wege, wget mit einem Proxy zu nutzen: Umgebungsvariablen für schnelle Tests, die Option -e für einmalige Nutzung in Skripten und die Datei .wgetrc für dauerhafte Nutzung. Vergessen Sie nicht, für HTTPS-Adressen https_proxy zu definieren, Zugangsdaten sicher aufzubewahren, bei Massendownloads die Geschwindigkeit zu begrenzen und bei Bedarf für SOCKS zu cURL zu wechseln.




