Verwendung von PowerShell Invoke-WebRequest mit einem Proxy

Das Cmdlet Invoke-WebRequest in PowerShell ist ein nützliches Tool, um HTTP-Anfragen an Websites zu senden. Bei Verwendung der Proxy-Services von Bright Data können Sie dieses Cmdlet mit einem Proxy einsetzen, indem Sie den „-Proxy“-Parameter gefolgt von Ihren Proxy-Einstellungen angeben.
12 min read
Invoke-Webrequest With a Proxy

Am Ende dieser Anleitung zu Invoke-WebRequest PowerShell Proxy werden Sie Folgendes wissen:

Legen wir also los!

Was ist PowerShell Invoke-WebRequest?

Bei Invoke-WebRequest handelt es sich um ein PowerShell-Cmdlet zum Senden von HTTP-, HTTPS- und FTP-Anfragen an Webserver und Webdienste. In der Standardeinstellung analysiert es automatisch die vom Server erzeugte Antwort und gibt Sammlungen von Formularen, Links, Bildern oder anderen wichtigen HTML-Elementen wieder. 

In der Regel wird es für den Zugriff auf REST-APIs, das Herunterladen von Dateien aus dem Internet oder zur Interaktion mit Webdiensten verwendet. Im Folgenden sehen Sie die grundlegende Syntax einer Invoke-WebRequest-Anfrage:

Invoke-WebRequest [-Uri] <Uri> [-Method <WebRequestMethod>] [-Headers <IDictionary>] [-Body <Object>]

Schlüsselparameter, die man sich merken sollte:

  • Uri: Die URI der Webressource, an welche die Anfrage gesendet wird.
  • Methode: Die für die Anfrage zu verwendende HTTP-Methode (z.B. GET, POST, PUT, DELETE). Invoke-WebRequest sendet standardmäßig GET-Anfragen.
  • Kopfzeilen: Zusätzliche HTTP-Header, die in die Anfrage eingefügt werden sollen.
  • Hauptteil: Der an den Server zu sendende Hauptteil der Anfrage.

Wie Sie sehen können, ist das einzige erforderliche Argument . Zusammengefasst lautet die einfachste Syntax für die Durchführung einer GET-Anfrage an einen bestimmten URI also wie folgt:

Invoke-WebRequest <Uri>

Dieses Cmdlet wurde 2012 in PowerShell 3.0 eingeführt. 

Installation von Invoke-WebRequest

Zur Verwendung von Invoke-WebRequest ist PowerShell erforderlich. Finden wir also heraus, wie man PowerShell installiert und Zugriff auf das Cmdlet Invoke-WebRequest erhält!

Windows

Zunächst müssen Sie wissen, dass es sich bei Windows PowerShell und PowerShell um zwei verschiedene Dinge handelt. Windows PowerShell ist die Version von PowerShell, welche im Lieferumfang von Windows enthalten und deren neueste Version die 5.1 ist. Windows Powershell bietet das Cmlet Invoke-WebRequest. Das bedeutet, dass Sie mit einer modernen Windows-Version sofort loslegen können! Bei älteren Versionen folgen Sie bitte der offiziellen Installationsanleitung von PowerShell.

Einige Funktionen von Invoke-WebRequest sind allerdings erst ab PowerShell 7.x verfügbar. Weitere Einzelheiten zur Installation finden Sie in der offiziellen Migrationsanleitung von Windows PowerShell 5.1 zu PowerShell 7. Beachten Sie, dass PowerShell 7.x in ein neues Verzeichnis installiert und parallel zu Windows PowerShell 5.1 ausgeführt wird.

Sie können die aktuelle Version der auf Ihrem Windows-Rechner installierten PowerShell mit folgendem Befehl überprüfen:

$PSVersionTable

Bei PowerShell 7.x sollte die Ausgabe in etwa so aussehen:

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.0

macOS und Linux

PowerShell 7.x lässt sich sowohl auf macOS als auch auf Linux installieren. Es ist jedoch nicht sehr sinnvoll, das gesamte PowerShell-Ökosystem in einem Betriebssystem zu installieren, nur um auf das Invoke-WebRequest-Cmlet zuzugreifen. Verwenden Sie stattdessen curl. Diese Bibliothek ist bei macOS und den meisten Linux-Distributionen bereits vorinstalliert und verfügt über die gleichen Funktionen wie Invoke-WebRequest. Erfahren Sie mehr in unserer curl-Proxy-Anleitung.

Voraussetzungen, um mit einem Proxy in PowerShell loszulegen

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 des Servers und sendet diese an Sie zurück. Auf diese Weise erkennt der Zielserver, dass die Anfragen von der IP und dem Standort des gewählten Proxy-Servers ausgehen und nicht von Ihnen.

Um einen PowerShell-Proxy mit Invoke-WebRequest zu verwenden, müssen Sie lernen, wie die URL eines Proxy-Servers aussieht. 

Hier die URL eines PowerShell Invoke-WebRequest-Proxys:

<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]

Sie besteht aus folgenden Elementen:

  • : Das Protokoll, das zur Verbindung mit dem Proxy-Server verwendet wird.
  • : Die IP-Adresse oder URL des Hostnamens des Proxy-Servers.
  • : Die Portnummer, die der Proxy-Server überwacht.
  • : Der optionale Benutzername, der für die Authentifizierung des Proxy-Servers erforderlich ist.
  • : Das optionale Passwort, das Sie für die Authentifizierung des Proxy-Servers angeben müssen.

Beachten Sie, dass der :// Teil der URL von Invoke-WebRequest benötigt wird. Wenn Sie diesen weglassen, wird die Anfrage mit der folgenden Fehlermeldung fehlschlagen:

Invoke-WebRequest : Dieser Vorgang wird für relative URIs nicht unterstützt.

Was die Proxy-Protokolle anbelangt, sind die gängigsten HTTP, HTTPS und SOCKS. Invoke-WebRequest in PowerShell 5.1 unterstützt nur HTTP, wohingegen es in PowerShell 7.x auch HTTPS und SOCKS unterstützt.

Zeit, einen gültigen HTTP-Proxy abzurufen!

Sie können einen solchen kostenlos online finden, und zwar wie folgt:

Protocol: HTTP; IP Address: 190.6.23.219; Port: 999

Setzen Sie diese Daten zusammen, um die folgende Proxy-URL zu erhalten:

http://190.6.23.219:999

Warnung

Die Nutzung kostenloser Proxys ist zwar für Lernzwecke akzeptabel, aber in der Praxis können Sie sich nicht auf sie verlassen. Kostenlose Proxys sind unzuverlässig, fehleranfällig, langsam, datengierig und nur von kurzer Dauer. Verwenden Sie diese nicht!

Wie lautet die Lösung? Premium-Proxys von Bright Data, dem besten Anbieter auf dem Markt Abonnieren und testen Sie unsere zuverlässigen Proxys kostenlos.

Proxys von Bright Data sind durch eine Authentifizierung gesichert, d. h. nur vertrauenswürdige Benutzer können auf sie zugreifen. Nehmen wir einmal an, das Protokoll ist HTTP, der Host ist 45.103.203.109, der Port ist 9571 und die Anmeldedaten sind admin-4521 und rUuH3tJqf. In diesem Falle würde die Invoke-WebRequest Proxy-URL lauten:

http://admin-4521:@rUuH3tJqf45.103.203.109:9571

Angabe eines HTTP-Proxys in Invoke-WebRequest

Ehe Sie loslegen, geben Sie den nachstehenden Befehl in PowerShell ein:

Invoke-WebRequest "https://httpbin.org/ip"

That should print something like:

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  : 32

Achten Sie auf das Inhaltsfeld. Dieses enthält Ihre IP. 

Aber warum? Weil der Endpunkt /ip aus dem HTTPBin-Projekt die Ursprungs-IP der Anfrage zurückliefert. Anders ausgedrückt, er gibt die IP-Adresse des Rechners zurück, von dem die Anfrage ausgeht. Im vorliegenden Fall handelt es sich um die IP-Adresse Ihres Rechners.

Wenn Sie lediglich auf das Inhaltsfeld zugreifen möchten, tun Sie dies mittels:

$response = Invoke-WebRequest "https://httpbin.org/ip"

$response.Content

This would print:

{

  "origin": "194.34.233.12"

}

Leiten Sie diese Anfrage über einen Proxy, sollten Sie die IP-Adresse des Proxy-Servers sehen und nicht Ihre. Der Aufruf dieses Endpunkts empfiehlt sich daher als Test, um die erwartete Funktion des angegebenen PowerShell Invoke-WebRequest-Proxys zu überprüfen. 

Es gibt verschiedene Möglichkeiten, einen PowerShell Proxy in Invoke-WebRequest festzulegen. Mehr dazu erfahren Sie in den nachstehenden Schritt-für-Schritt-Anleitungen!

Verwendung einer Befehlszeilenoption

Invoke-WebRequest bietet das Flag-Proxy, um eine Proxy-URL für Ihre Anfrage zu bestimmen.

Die Syntax zur Verwendung von Invoke-WebRequest mit einem Proxy-Server lautet somit:

Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>

Wenn Sie diesen PowerShell-Befehl nun ausführen:

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:22225" -ProxyCredential (New-Object System.Management.Automation.PSCredential("brd-customer-CUSTOMER_ID-zone-ZONE’S_NAME", ("ZONE’S_PASSWORD" | ConvertTo-SecureString -AsPlainText -Force)))

The result should be:

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  : 31

Achten Sie darauf, dass der Ursprung in Inhalt mit der IP des Proxy-Servers übereinstimmt. Dies belegt, dass der Zielserver die Anfrage erwartungsgemäß als vom Proxy-Server ausgehend betrachtet. Fantastisch!

Hinweis: Denken Sie daran, dass kostenlose Proxys nur von kurzer Dauer sind! Zum Zeitpunkt, an dem Sie diese Anleitung lesen, wird der oben genannte Server wahrscheinlich nicht mehr aktiv sein. Falls ein Fehler auftritt, ersetzen Sie diesen durch einen neuen Proxy.

Verwendung von Umgebungsvariablen

Seit PowerShell 7.0 unterstützt Invoke-WebRequest die Proxy-Konfiguration über Umgebungsvariablen

Eine weitere Option zur Verwendung eines PowerShell-Proxys in Invoke-WebRequest ist das Setzen der folgenden zwei Umgebungsvariablen:

  • HTTP_PROXY: Die URL des bei HTTP-Anfragen zu verwendenden Proxy-Servers.
  • HTTPS_PROXY: Die URL des bei HTTPS-Anfragen zu verwendenden Proxy-Servers.

Unter Windows können Sie die beiden Umgebungsvariablen mit dieser PowerShell-Syntax festlegen:

$env:HTTP_PROXY = "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

$env:HTTPS_PROXY = "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

In unserem Beispiel lauten die Befehle:

$env:HTTP_PROXY = "http://190.6.23.219:999"

$env:HTTPS_PROXY = "http://190.6.23.219:999"

Unter macOS und Linux ist die folgende Syntax zu verwenden:

export HTTP_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

export HTTPS_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

Die beiden Befehle lauten demnach:

export http_proxy="http://190.6.23.219:999"

export https_proxy="http://190.6.23.219:999"

Von nun an wird jede Invoke-WebRequest-Anfrage über die angegebenen Proxys laufen, ohne dass Sie die Option Proxy hinzufügen müssen. Führen Sie nach dem Einstellen der Umgebungsvariablen den nachstehenden Befehl aus:

Invoke-WebRequest "https://httpbin.org/ip"

You will get the same result as before:

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  : 31

Zur Deaktivierung der Invoke-WebRequest-Proxys deaktivieren Sie die Umgebungsvariablen durch:

$env:HTTP_PROXY = ""

$env:HTTPS_PROXY = ""

Or on macOS and Linux:

unset HTTP_PROXY

unset HTTPS_PROXY

Invoke-WebRequest kehrt zu seinem Standardverhalten zurück, während https://httpbin.org/ip jetzt Ihre IP-Adresse offenlegt.

Verwendung von HTTPS- und SOCKS-Proxys in PowerShell

Wenn Sie einen HTTPS- oder SOCKS-Proxy verwenden müssen, ist eine Aktualisierung auf Version 7.x+ von PowerShell erforderlich. Andernfalls wird der Aufruf von Invoke-WebRequest fehlschlagen mit:

Invoke-WebRequest : Der ServicePointManager unterstützt keine Proxys mit dem https-Schema.

Oder bei Verwendung von SOCKS-Proxys:

Invoke-WebRequest : Der ServicePointManager unterstützt keine Proxys mit dem Socks-Schema.

Beim Einsatz von HTTPS- oder SOCKS-Proxys in PowerShell 7.x bleibt die Befehlsstruktur von Invoke-WebRequest unverändert:

Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>

Was sich jedoch ändert, ist, dass https, socks4, socks4a, socks5 oder socks5a anstelle von http steht.

Wenn Sie eine Anfrage mit einem Proxy aufrufen möchten, dessen Protokoll nicht den oben genannten entspricht, erhalten Sie folgende Fehlermeldung:

Invoke-WebRequest: Only the 'http', 'https', 'socks4', 'socks4a' and 'socks5' schemes are allowed for proxies.

Ein vollständiges Beispiel für eine Invoke-WebRequest SOCKS-Proxy-Anfrage lautet demnach:

Invoke-WebRequest -Proxy "socks5://94.14.109.54:3567" "http://httpbin.org/ip"

As you can expect, the result will be:

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  : 31

Tipps und Tricks, die man kennen muss

Lernen Sie einige nützliche Tricks und wertvolle Tipps für den gekonnten Umgang mit einem PowerShell Invoke-WebRequest-Proxy.

Die PowerShell Proxy-Konfiguration ignorieren

Falls Sie verhindern möchten, dass Invoke-WebRequest den aus den Umgebungsvariablen abgelesenen konfigurierten PowerShell-Proxy nutzt, können Sie die Option NoProxy wie folgt verwenden:

Invoke-WebRequest NoProxy

Hierdurch wird Invoke-WebRequest aufgefordert, ohne Verwendung eines Proxys anzufragen.

Um zu überprüfen, ob dieser Ansatz funktioniert, setzen Sie einen Proxy in den Umgebungsvariablen ein und führen ihn aus:

Invoke-WebRequest -NoProxy "https://httpbin.org/ip"

Der daraus entstehende Ursprung enthält Ihre IP und nicht die des Proxy-Servers.

Avoid SSL Certificate Errors

Bei Verwendung von HTTP-Proxys können Ihre Anfragen aufgrund von SSL-Zertifikatsfehlern fehlschlagen. Um dies zu umgehen, geben Sie die Option SkipCertificateCheck an:

Invoke-WebRequest -SkipCertificateCheck -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>

SkipCertificateCheck unterstützt bei der Vermeidung von Zertifikatsfehlern, indem es unsichere Serververbindungen zulässt. Bedenken Sie, dass die Verwendung dieses Parameters nicht sicher ist. Nutzen Sie diesen nur, wenn Sie mit bekannten Hosts agieren.

Sie können zum Beispiel HTTPBin über einen Proxy aufrufen, während Sie SSL-Probleme auf folgende Weise umgehen:

Invoke-WebRequest -SkipCertificateCheck -Proxy "http://190.6.23.219:999" "https://httpbin.org/ip"

Welchen PowerShell Proxy sollten Sie verwenden?

Die Antwort auf diese Frage hängt vom jeweiligen Zweck Ihrer Invoke-WebRequest-Anfrage ab. Um den richtigen PowerShell-Proxy für Ihre Anforderungen zu ermitteln, lohnt es sich, einen Blick auf die verschiedenen Arten von Proxys zu werfen:

  • Rechenzentrum-Proxys: Diese sind schnell und preiswert, können aber aufgrund ihrer identifizierbaren IP-Bereiche von Websites leicht erkannt und blockiert werden.
  • Residential-Proxys: Diese Proxys stellen echte, rotierende IP-Adressen von echten Geräten an bestimmten Orten bereit. Auf diese Weise kann ein hohes Maß an Anonymität gewährleistet werden. Residential-Proxys sind ideal für den Zugriff auf Websites, die mit geografischen Beschränkungen operieren, oder um Anti-Bot-Maßnahmen zu umgehen.
  • ISP-Proxys: Diese sind sicher, schnell und äußerst zuverlässig, da sie statische IPs von Geräten bereitstellen, die bei ISPs registriert sind. ISP-Proxys werden auch als statische Residential-Proxys bezeichnet und sind die ideale Lösung für SEO-Monitoring und Marktforschung.
  • Mobile Proxys: Sie stellen IPs von echten mobilen Geräten bereit und gewährleisten damit ein hohes Maß an Anonymität. Sie sind für den Zugriff auf Anwendungen, Websites oder Inhalte nützlich, die eigens für mobile Geräte entwickelt wurden.

Dies war lediglich ein kleiner Überblick, aber in unserem Leitfaden zu Proxy-IP-Typen finden Sie weitere Informationen.

Fazit

In dieser Anleitung zu PowerShell-Proxys haben Sie gelernt, was Invoke-WebRequest ist, wie es funktioniert bzw. wie Sie es mit einem HTTP/HTTPS/SOCKS-Proxy verwenden können. Dabei hat sich herausgestellt, dass man sich nicht auf Proxys von kostenlosen Anbietern verlassen kann. Folglich bleibt nur zu klären, für welchen Proxy-Anbieter Sie sich entscheiden sollten. Sparen Sie Zeit und Energie und wählen Sie direkt den besten Anbieter des Marktes, Bright Data.

Bright Data betreibt die weltweit besten Proxy-Server und betreut Fortune-500-Unternehmen sowie mehr als 20.000 Kunden.

In der Summe zählt es zu den größten und zuverlässigsten Scraping-orientierten Proxy-Netzwerken auf dem Markt. 

Wenden Sie sich an einen unserer Vertriebsmitarbeiter und finden Sie heraus, welches der Produkte von Bright Data Ihren Anforderungen am besten entspricht.