Am Ende dieses Invoke-WebRequest PowerShell Proxy-Leitfadens wissen Sie:
- Was ist PowerShell Invoke-WebRequest?
- Installieren von Invoke-WebRequest
2.1. Windows
2.2. macOS und Linux - Voraussetzungen für den Einstieg mit einem Proxy in PowerShell
- So geben Sie einen HTTP Proxy in Invoke-WebRequest an
4.1. Verwendung einer Command-Line-Option
4.2. Verwendung von Umgebungsvariablen - So verwenden Sie HTTPS- und SOCKS-Proxies in PowerShell
- Tipps und Tricks, die Sie kennen müssen
6.1. Die PowerShell Proxy-Konfiguration ignorieren
6.2. SSL-Zertifikatsfehler vermeiden - Welchen PowerShell Proxy sollten Sie verwenden?
Legen wir los!
Invoke-WebRequest ist ein PowerShell-Cmdlet zum Senden von HTTP-, HTTPS- und FTP-Anfragen an Webserver und Webservices. Standardmäßig parst es automatisch die vom Server erzeugte Antwort und gibt Sammlungen von Formularen, Links, Bildern oder anderen wichtigen HTML-Elementen zurück.
Üblicherweise wird es verwendet, um auf REST APIs zuzugreifen, Dateien aus dem Web herunterzuladen oder mit Webservices zu interagieren. Unten finden Sie die grundlegende Syntax einer Invoke-WebRequest-Anfrage:
Invoke-WebRequest [-Uri] <Uri> [-Method <WebRequestMethod>] [-Headers <IDictionary>] [-Body <Object>]Wichtige Parameter, die Sie sich merken sollten:
- Uri: Die URI der Webressource, an die die Anfrage gesendet wird.
- Method: Die für die Anfrage zu verwendende HTTP-Methode (z. B. GET, POST, PUT, DELETE).
- Invoke-WebRequest sendet standardmäßig GET-Anfragen.
- Headers: Die zusätzlichen HTTP-Header, die in die Anfrage aufgenommen werden sollen.
- Body: Der Body der Anfrage, der an den Server gesendet werden soll.
Wie Sie sehen, ist das einzige erforderliche Argument . Kurz gesagt: Die einfachste Syntax, um eine GET-Anfrage an eine bestimmte URI auszuführen, ist:
Invoke-WebRequest <Uri>Um Invoke-WebRequest zu verwenden, benötigen Sie PowerShell. Sehen wir uns an, wie Sie PowerShell installieren und Zugriff auf das Invoke-WebRequest-Cmdlet erhalten!
Zunächst ist wichtig zu verstehen, dass Windows PowerShell und PowerShell zwei unterschiedliche Dinge sind. Windows PowerShell ist die PowerShell-Version, die mit Windows ausgeliefert wird (neueste Version 5.1). Sie stellt das Invoke-WebRequest-Cmdlet bereit. Wenn Sie eine moderne Windows-Version verwenden, können Sie direkt loslegen! Für ältere Versionen folgen Sie der offiziellen PowerShell-Installationsanleitung.
Einige Funktionen von Invoke-WebRequest sind erst ab PowerShell 7.x verfügbar. Details zur Installation finden Sie im offiziellen Migrationsleitfaden von Windows PowerShell 5.1 zu PowerShell 7. Beachten Sie, dass PowerShell 7.x in einem neuen Verzeichnis installiert wird und parallel zu Windows PowerShell 5.1 ausgeführt wird.
Sie können die aktuelle PowerShell-Version auf Ihrem Windows-Rechner wie folgt prüfen:
$PSVersionTableUnter PowerShell 7.x könnte das etwa Folgendes ausgeben:
PSVersion 7.4.1
PSEdition Core
GitCommitId 7.4.1
OS Microsoft Windows 10.0.22631
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0PowerShell 7.x kann sowohl auf macOS als auch auf Linux installiert werden. Allerdings ergibt es wenig Sinn, das gesamte PowerShell-Ökosystem auf diesen Betriebssystemen zu installieren, nur um auf das Invoke-WebRequest-Cmdlet zuzugreifen. Stattdessen können Sie curl verwenden, das auf macOS und den meisten Linux-Distributionen vorinstalliert ist und dieselben Möglichkeiten bietet. Erfahren Sie mehr in unserem curl Proxy-Leitfaden.
Ein Proxy fungiert als Vermittler zwischen einem Client und dem Zielserver: Er fängt Ihre Anfragen ab, leitet sie an den Server weiter, empfängt die Antworten und sendet sie an Sie zurück. Auf diese Weise sieht der Zielserver die Anfragen so, als kämen sie von der IP-Adresse und dem Standort des gewählten Proxy-Servers – nicht von Ihnen.
Um mit der Nutzung eines PowerShell Proxy mit Invoke-WebRequest zu beginnen, müssen Sie verstehen, wie eine Proxy-Server-URL aussieht.
Dies ist die URL eines PowerShell Invoke-WebRequest Proxy:
<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]Sie besteht aus:
PROTOCOL: Das Protokoll, das für die Verbindung zum Proxy-Server verwendet werden soll.HOST: Die IP-Adresse oder URL des Hostnamens des Proxy-Servers.PORT: Die Portnummer, auf der der Proxy-Server lauscht.USERNAME: Der optionale Benutzername für die Proxy-Authentifizierung.PASSWORD: Das optionale Passwort für die Proxy-Authentifizierung.
💡 Wichtig:
Der Teil :// ist für Invoke-WebRequest erforderlich. Wenn Sie ihn weglassen, schlägt die Anfrage fehl mit:
Invoke-WebRequest : This operation is not supported for a relative URI.
In PowerShell 5.1 unterstützt Invoke-WebRequest nur HTTP, während es in PowerShell 7.x auch HTTPS und SOCKS unterstützt.
Zeit, einen gültigen HTTP Proxy zu beziehen!
Sie können kostenlos online einen finden, zum Beispiel:
Protocol: HTTP; IP Address: 190.6.23.219; Port: 999
Setzen Sie das zusammen zu:
http://190.6.23.219:999
⚠️ Warnung:
Kostenlose Proxies sind unzuverlässig, fehleranfällig, langsam, datenhungrig und kurzlebig. Verwenden Sie sie nicht!
Lösung? Premium-Proxies von Bright Data, dem besten Anbieter auf dem Markt. Abonnieren Sie und testen Sie unsere zuverlässigen Proxies kostenlos.
Bright Data’s proxy services sind durch Authentifizierung geschützt, sodass nur vertrauenswürdige Benutzer darauf zugreifen können.
Angenommen:
Protocol: HTTP
Host: 45.103.203.109
Port: 9571
Username: admin-4521
Password: rUuH3tJqf
Dann lautet die Invoke-WebRequest Proxy-URL:
http://admin-4521:@rUuH3tJqf45.103.203.109:9571Führen Sie vor dem Start Folgendes aus:
Invoke-WebRequest "https://httpbin.org/ip"Das könnte Folgendes ausgeben:
StatusCode : 200
StatusDescription : OK
Content : {
"origin": "194.34.233.12"
}
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 32
Content-Type: application/json
Date: Thu, 01 Feb 2024 10:46:14 GMT...
Forms : {}
Headers : {[Connection, keep-alive], [Access-Control-Allow-Origin, *],
[Access-Control-Allow-Credentials, true], [Content-Length, 32]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 32Konzentrieren Sie sich auf das Feld Content. Das enthält Ihre IP-Adresse.
Warum? Weil https://httpbin.org/ip die Ursprungs-IP der Anfrage zurückgibt. Das ist also die IP-Adresse Ihres Rechners, wenn kein Proxy gesetzt ist.
Wenn Sie nur das Feld Content möchten:
$response = Invoke-WebRequest "https://httpbin.org/ip"
$response.ContentGibt etwas aus wie:
{
"origin": "194.34.233.12"
}Wenn Sie diese Anfrage über einen Proxy leiten, sehen Sie stattdessen die Proxy-Server-IP. Das ist ein hervorragender Test, um zu bestätigen, dass PowerShell Invoke-WebRequest Ihren Proxy tatsächlich verwendet.
Es gibt mehrere Möglichkeiten, einen PowerShell Proxy in Invoke-WebRequest zu setzen:
Invoke-WebRequest bietet das Flag -Proxy:
Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>Also:
Invoke-WebRequest -Proxy "http://190.6.23.219:999" "https://httpbin.org/ip"
Invoke-WebRequest -Uri "http://httpbin.org/ip" `
-Proxy "http://brd.superproxy.io:33335" `
-ProxyCredential (
New-Object System.Management.Automation.PSCredential(
"brd-customer-CUSTOMER_ID-zone-ZONE’S_NAME",
("ZONE’S_PASSWORD" | ConvertTo-SecureString -AsPlainText -Force)
)
)Und das Ergebnis:
StatusCode : 200
StatusDescription : OK
Content : {
"origin": "190.6.23.219"
}
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 31
Content-Type: application/json
Date: Thu, 01 Feb 2024 12:36:56 GMT...
Forms : {}
Headers : {[Connection, keep-alive], [Access-Control-Allow-Origin, *],
[Access-Control-Allow-Credentials, true], [Content-Length, 31]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 31Hier entspricht origin der Proxy-Server-IP, was zeigt, dass die Anfrage über den Proxy lief. Perfekt!
Hinweis: Kostenlose Proxies sind kurzlebig. Wenn dieser fehlschlägt, wählen Sie einen anderen.
Seit PowerShell 7.0 unterstützt Invoke-WebRequest die Proxy-Konfiguration über Umgebungsvariablen.
Setzen Sie zwei envs:
HTTP_PROXY:Proxy-URL für HTTP-Anfragen.HTTPS_PROXY:Proxy-URL für HTTPS-Anfragen.
Unter Windows:
$env:HTTP_PROXY = "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
$env:HTTPS_PROXY = "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"Zum Beispiel:
$env:HTTP_PROXY = "http://190.6.23.219:999"
$env:HTTPS_PROXY = "http://190.6.23.219:999"Unter macOS / Linux:
export HTTP_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
export HTTPS_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"Zum Beispiel:
export http_proxy="http://190.6.23.219:999"
export https_proxy="http://190.6.23.219:999"Alle Invoke-WebRequest-Aufrufe laufen nun automatisch über diese Proxies. Führen Sie aus:
Invoke-WebRequest "https://httpbin.org/ip"Sie sehen wieder die Proxy-IP in origin. Perfekt.
Um diese Proxies zu deaktivieren, setzen Sie sie zurück:
$env:HTTP_PROXY = ""
$env:HTTPS_PROXY = ""macOS / Linux:
unset HTTP_PROXY
unset HTTPS_PROXYDann zeigt Invoke-WebRequest "https://httpbin.org/ip" wieder Ihre IP-Adresse an.
Für HTTPS- oder SOCKS Proxies müssen Sie PowerShell 7.x+ verwenden. Andernfalls erhalten Sie:
Invoke-WebRequest : The ServicePointManager does not support proxies with the https scheme.
Oder für SOCKS:
Invoke-WebRequest : The ServicePointManager does not support proxies with the socks scheme.
In PowerShell 7.x ist die Struktur weiterhin:
Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>Aber <PROTOCOL> kann https, socks4, socks4a, socks5, socks5a sein (anstelle von nur http).
Wenn Sie ein Protokoll außerhalb dieser verwenden, erhalten Sie:
Invoke-WebRequest: Only the 'http', 'https', 'socks4', 'socks4a' and 'socks5' schemes are allowed for proxies.
Beispiel für einen SOCKS Proxy:
Invoke-WebRequest -Proxy "socks5://94.14.109.54:3567" "http://httpbin.org/ip"Die Ausgabe könnte sein:
StatusCode : 200
StatusDescription : OK
Content : {
"origin": "94.14.109.54"
}
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 31
Content-Type: application/json
Date: Thu, 01 Feb 2024 12:47:56 GMT...
Forms : {}
Headers : {[Connection, keep-alive], [Access-Control-Allow-Origin, *],
[Access-Control-Allow-Credentials, true], [Content-Length, 31]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 31Sehen Sie sich nützliche Tricks an, um mit einem PowerShell Invoke-WebRequest Proxy wie ein Profi zu arbeiten.
Verwenden Sie -NoProxy, um den über Umgebungsvariablen konfigurierten Proxy zu überspringen:
Invoke-WebRequest -NoProxy <Uri>Dies kontaktiert <Uri> ohne Proxy.
Prüfen Sie dies, indem Sie einen Proxy in den envs setzen und dann Folgendes ausführen:
Invoke-WebRequest -NoProxy "https://httpbin.org/ip"Sie sehen Ihre IP-Adresse, nicht die des Proxy.
Die Verwendung von HTTP Proxies kann aufgrund von SSL-Zertifikatsfehlern fehlschlagen. Verwenden Sie -SkipCertificateCheck:
Invoke-WebRequest -SkipCertificateCheck -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>-SkipCertificateCheck erlaubt unsichere Serververbindungen. Das ist nicht sicher, daher sollten Sie es nur mit vertrauenswürdigen Hosts verwenden.
Beispiel:
Invoke-WebRequest -SkipCertificateCheck -Proxy "http://190.6.23.219:999" "https://httpbin.org/ip"Das hängt von Ihren Invoke-WebRequest-Zielen ab. Berücksichtigen Sie die wichtigsten Proxy-Typen:
- Rechenzentrums-Proxies: Schnell, günstig, aber bei Erkennung leicht zu blockieren.
- Residential Proxies: Rotierende echte IP-Adressen von Geräten. Perfekt für geoblockierte Inhalte oder zur Umgehung von Anti-Bot.
- ISP-Proxies: Sicher, schnell, statische IPs von ISPs – ideal für SEO oder Marktforschung.
- Mobile Proxies: Echte Mobilgeräte, am besten für mobile-spezifische Apps/Seiten.
Mehr dazu in unserem Leitfaden zu Proxy-IP-Typen.
