Skip to content

bright-data-de/Invoke-web-request-proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 

Repository files navigation

PowerShell Invoke-WebRequest Proxy Guide

Promo

Am Ende dieses Invoke-WebRequest PowerShell Proxy-Leitfadens wissen Sie:

  1. Was ist PowerShell Invoke-WebRequest?
  2. Installieren von Invoke-WebRequest
    2.1. Windows
    2.2. macOS und Linux
  3. Voraussetzungen für den Einstieg mit einem Proxy in PowerShell
  4. So geben Sie einen HTTP Proxy in Invoke-WebRequest an
    4.1. Verwendung einer Command-Line-Option
    4.2. Verwendung von Umgebungsvariablen
  5. So verwenden Sie HTTPS- und SOCKS-Proxies in PowerShell
  6. Tipps und Tricks, die Sie kennen müssen
    6.1. Die PowerShell Proxy-Konfiguration ignorieren
    6.2. SSL-Zertifikatsfehler vermeiden
  7. Welchen PowerShell Proxy sollten Sie verwenden?

Legen wir los!


What Is PowerShell Invoke-WebRequest?

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>

Installing Invoke-WebRequest

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!

Windows

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:

$PSVersionTable

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

macOS and Linux

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

Prerequisites to Get Started with a Proxy in PowerShell

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

How to Specify an HTTP Proxy in Invoke-WebRequest

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

Konzentrieren 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.Content

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

Using a Command Line Option

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

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

Using Environment Variables

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_PROXY

Dann zeigt Invoke-WebRequest "https://httpbin.org/ip" wieder Ihre IP-Adresse an.

How To Use HTTPS and SOCKS Proxies in PowerShell

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

Tips and Tricks You Need to Know

Sehen Sie sich nützliche Tricks an, um mit einem PowerShell Invoke-WebRequest Proxy wie ein Profi zu arbeiten.

Ignore the PowerShell Proxy Configuration

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.

Avoid SSL Certificate Errors

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"

Which PowerShell Proxy Should You Use?

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.

About

Anleitung zur Verwendung von Proxies mit PowerShell Invoke-WebRequest für HTTP-, HTTPS- und SOCKS-Verbindungen. Enthält Einrichtung, Tipps und Vergleiche von Proxy-Typen.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors