Utilisation de PowerShell Invoke-WebRequest avec un proxy

Le cmdlet Invoke-WebRequest de PowerShell permet d’envoyer des requêtes HTTP à des sites web. Si vous utilisez les services proxy de Bright Data, vous pouvez utiliser ce cmdlet avec un proxy en spécifiant le paramètre -Proxy suivi des informations relatives à votre proxy.
13 min de lecture
Invoke-Webrequest With a Proxy

À la fin de ce guide d’utilisation de PowerShell Invoke-WebRequest avec proxy., vous saurez :

C’est parti !

Qu’est-ce que PowerShell Invoke-WebRequest ?

Invoke-WebRequest est un cmdlet PowerShell permettant d’envoyer des requêtes HTTP, HTTPS et FTP à des serveurs et à des services web. Par défaut, il analyse automatiquement la réponse produite par le serveur et renvoie des ensembles de formulaires, de liens, d’images ou d’autres éléments HTML utiles. 

Il est généralement utilisé pour accéder aux API REST, télécharger des fichiers depuis le web ou interagir avec des services web. Voici la syntaxe de base d’une requête Invoke-WebRequest :

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

Les principaux paramètres à retenir sont les suivants :

  • -Uri : URI de la ressource web à laquelle la requête est envoyée.
  • Méthode : méthode HTTP à utiliser pour la requête (par exemple, GET, POST, PUT, DELETE). Invoke-WebRequest envoie des requêtes GET par défaut.
  • -En-têtes : en-têtes HTTP supplémentaires à inclure dans la requête.
  • -Corps : corps de la requête à envoyer au serveur.

Comme vous pouvez le voir, le seul argument requis est. Pour résumer, la syntaxe la plus simple pour exécuter une requête GET vers un URI donné est la suivante :

Invoke-WebRequest <Uri>

Ce cmdlet a été introduit dans PowerShell 3.0 en 2012. 

Installation d’Invoke-WebRequest

Pour utiliser Invoke-WebRequest, vous avez besoin de PowerShell. Voyons donc comment installer PowerShell et accéder au cmdlet Invoke-WebRequest.

Windows

Tout d’abord, vous devez comprendre que Windows PowerShell et PowerShell sont deux choses différentes. Windows PowerShell est la version de PowerShell fournie avec Windows. Sa dernière version est la 5.1. Windows Powershell utilise le cmdlet Invoke-WebRequest. Cela signifie que si vous utilisez une version moderne de Windows, vous avez tout ce qu’il vous faut ! Pour les anciennes versions, suivez le guide d’installation officiel de PowerShell.

Par ailleurs, certaines fonctionnalités de Invoke-WebRequest ne sont disponibles qu’à partir de PowerShell 7.x. Pour en savoir plus sur son installation, suivez le guide de migration officiel de Windows PowerShell 5.1 vers PowerShell 7. Notez que PowerShell 7.x s’installe dans un nouveau répertoire et s’exécute en même temps que Windows PowerShell 5.1.

Vous pouvez vérifier la version actuelle de PowerShell installée sur votre ordinateur Windows à l’aide de cette commande :

$PSVersionTable

Dans PowerShell 7.x, vous devriez voir queque chose qui ressemble à ceci :

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 et Linux

PowerShell 7.x peut être installé à la fois sur macOS et Linux. Cependant, cela n’a pas beaucoup de sens d’installer l’intégralité de l’écosystème PowerShell dans un système d’exploitation uniquement pour accéder au cmdlet Invoke-WebRequest. Utilisez plutôt curl. Cette bibliothèque est préinstallée sur macOS et la plupart des distributions Linux, et offre les mêmes fonctionnalités que Invoke-WebRequest. Pour en savoir plus, consultez notre guide sur le proxy curl.

Conditions préalables à l’utilisation d’un proxy dans PowerShell

Un proxy est un intermédiaire entre le client et le serveur de destination. Il intercepte les requêtes des clients, les transmet aux serveurs cibles et renvoie la réponse au client. De cette façon, le serveur de destination voit que les requêtes proviennent de l’adresse IP et de l’emplacement du serveur proxy choisi et non de vous.

Pour commencer à utiliser un proxy PowerShell avec Invoke-WebRequest, vous devez comprendre à quoi ressemble l’URL d’un serveur proxy. 

Voici l’URL d’un proxy PowerShell Invoke-WebRequest :

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

Elle est constituée des éléments suivants :

  •  : protocole à utiliser pour se connecter au serveur proxy.
  •  : adresse IP ou URL du nom d’hôte du serveur proxy.
  •  : numéro de port écouté par le serveur proxy.
  •  : nom d’utilisateur facultatif à indiquer lorsque l’authentification par proxy est requise.
  •  : mot de passe facultatif à indiquer lorsque l’authentification par proxy est requise.

Notez que la partie :// de l’URL est requise pour Invoke-WebRequest. Si vous l’omettez, la requête échouera avec l’erreur suivante :

Invoke-WebRequest   : cette opération n’est pas possible avec les URI relatifs.

Les protocoles de proxy les plus courants sont HTTP, HTTPS et SOCKS. Invoke-WebRequest ne prend en charge que le HTTP dans PowerShell 5.1, alors que dans PowerShell 7.x, il prend également en charge le HTTPS et le SOCKS.

Voyons comment obtenir un proxy HTTP valide.

Vous en trouverez certains gratuitement sur Internet, comme ci-dessous :

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

Ces informations permettent d’obtenir l’URL de proxy suivante :

http://190.6.23.219:999

Avertissement

Ces proxys gratuits sont intéressants dans le cadre de la formation, mais ils ne peuvent pas être utilisés dans des situations réelles. Les proxys gratuits sont peu fiables, sujets aux erreurs, lents, gourmands en données et éphémères. Ne les utilisez pas !

La solution ? Les proxys premium de Bright Data, le meilleur fournisseur du marché. Abonnez-vous pur essayer gratuitement nos proxys fiables.

Les proxys de Bright Data sont protégés par authentification afin que seuls les utilisateurs de confiance puissent y accéder. Supposons maintenant que le protocole soit HTTP, que l’hôte soit 45.103.203.109, que le port soit 9571 et les informations d’identification soient admin-4521 et Ruuh3TJQF. Dans ce cas, l’URL du proxy Invoke-WebRequest serait :

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

Définir un proxy HTTP dans Invoke-WebRequest

Avant de commencer, lancez la commande ci-dessous dans PowerShell :

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

Regardez le champ Contenu. Celui-ci contient votre adresse IP. 

Pourquoi ? Parce que le terminal/l’adresse IP du projet HTTPBin renvoie l’adresse IP d’où provient la requête. En d’autres termes, il renvoie l’adresse IP de la machine qui a effectué la requête. Dans ce cas, il s’agit de l’adresse IP de votre machine.

Si vous souhaitez accéder uniquement au champ Contenu, vous pouvez le faire avec :

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

$response.Content

This would print:

{

  "origin": "194.34.233.12"

}

Si vous acheminez cette requête via un proxy, vous devriez voir l’adresse IP du serveur proxy et non la vôtre. Ainsi, le fait d’appeler ce terminal est une bonne manière de vérifier que le proxy PowerShell Invoke-WebRequest choisi fonctionne comme prévu. 

Il existe plusieurs manières de définir un proxy PowerShell dans Invoke-WebRequest. Pour en savoir plus, lisez les instructions étape par étape ci-dessous.

Avec une ligne de commande

Invoke-WebRequest propose l’indicateur -Proxy pour définir une URL proxy pour votre requête.

Ainsi, la syntaxe pour utiliser Invoke-WebRequest avec un serveur proxy devient :

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

Si vous exécutez maintenant cette commande PowerShell :

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

Notez que l’origine du contenu correspond à l’adresse IP du serveur proxy. Cela prouve que le serveur cible considère que la requête provient du proxy, comme prévu.

Remarque : N’oubliez pas que les proxys gratuits ont une courte durée de vie. Au moment où vous lirez ce guide, il est peu probable que le serveur ci-dessus soit toujours actif. En cas d’erreur, remplacez-le par un nouveau proxy.

Utilisation de variables d’environnement

Depuis PowerShell 7.0, Invoke-WebRequest prend en charge la configuration du proxy via des variables d’environnement

Ainsi, pour utiliser un proxy PowerShell dans Invoke-WebRequest, il est également possible de définir les deux environnements suivants :

  • HTTP_PROXY : URL du serveur proxy à utiliser pour les requêtes HTTP.
  • HTTPS_PROXY : URL du serveur proxy à utiliser pour les requêtes HTTPS.

Sous Windows, vous pouvez définir les deux variables d’environnement à l’aide de la syntaxe PowerShell suivante :

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

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

Dans notre exemple, les commandes deviendront :

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

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

Sur macOS et Linux, vous devez utiliser la syntaxe ci-dessous :

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

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

Les deux commandes seront donc :

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

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

Désormais, chaque requête Invoke-WebRequest passera par les proxys définis sans avoir à ajouter l’option -Proxy. Après avoir défini les paramètres, lancez la commande ci-dessous :

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

Pour désactiver les proxys Invoke-WebRequest, désactivez les variables d’environnement avec :

$env:HTTP_PROXY = ""

$env:HTTPS_PROXY = ""

Or on macOS and Linux:

unset HTTP_PROXY

unset HTTPS_PROXY

Invoke-WebRequest retrouvera son comportement standard, et https://httpbin.org/ip exposera désormais votre IP.

Utilistion des proxys HTTPS et SOCKS dans PowerShell

Si vous devez utiliser un proxy HTTPS ou SOCKS, vous devez passer à la version 7.x+ de PowerShell. Sinon, Invoke-WebRequest échouera avec :

Invoke-WebRequest : ServicePointManager ne prend pas en charge les proxys utilisant le schéma https.

Ou pour un proxy SOCKS :

Invoke-WebRequest : ServicePointManager ne prend pas en charge les proxys utilisant le schéma socks.

Pour les proxys HTTPS ou SOCKS dans PowerShell 7.x, la structure de la commande Invoke-WebRequest reste la même :

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

Ce qui change, c’est que ce sera https, socks4, socks4a, socks5 ou socks5a, au lieu de http.

Si vous essayez de formuler une requête avec un proxy utilisant un protocole autre que ceux mentionnés ci-dessus, vous obtiendrez le message d’erreur suivant :

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

Voici donc un exemple complet de requête proxy SOCKS de type Invoke-WebRequest :

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

Bon à savoir

Voici quelques conseils utiles pour gérer un proxy PowerShell Invoke-WebRequest comme un pro.

Ignorer la configuration du proxy PowerShell

Si vous souhaitez empêcher Invoke-WebRequest d’utiliser le proxy PowerShell configuré lu à partir des variables d’environnement, vous pouvez utiliser l’option -NoProxy comme suit :

Invoke-WebRequest -NoProxy <Uri>

Cela demande à Invoke-WebRequest de contacter sans utiliser de proxy.

Pour vérifier que cette méthode fonctionne, configurez un proxy dans les environnement et exécutez :

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

L’origine résultante contiendra votre adresse IP, pas celle du serveur proxy.

Avoid SSL Certificate Errors

Lorsque vous utilisez des proxys HTTP, vos requêtes peuvent échouer en raison d’erreurs de certificat SSL. Pour éviter cela, spécifiez l’option -SipCertificateCheck :

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

-SipCertificateCheck vous permet d’éviter les erreurs de certificat en autorisant les connexions non sécurisées au serveur. N’oubliez pas que ce paramètre n’est pas sécurisé. Configurez-le uniquement lorsque vous traitez avec des hôtes connus.

Par exemple, vous pouvez contacter HttpBin via un proxy tout en contournant les problèmes SSL avec :

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

Quel proxy PowerShell devez-vous utiliser ?

La réponse à cette question change en fonction de ce que vous souhaitez obtenir avec votre requête Invoke-WebRequest. Pour savoir quel proxy PowerShell convient le mieux à vos besoins, découvrez les différents types de proxys disponibles :

  • Proxys de datacentrs : rapides et peu coûteux, ils peuvent néanmoins être facilement détectés et bloqués par les sites en raison de leurs plages d’adresses IP identifiables.
  • Proxys résidentiels : ces derniers fournissent des adresses IP renouvelables et authentiques provenant d’appareils réels situés à des endroits spécifiques. Cela signifie qu’ils peuvent garantir un haut niveau d’anonymat. Les proxys résidentiels sont parfaits pour accéder à des sites qui utilisent des restrictions géographiques ou pour éviter les mesures anti-bots.
  • Proxys de fournisseurs d’accès Internet : ces proxys sont sûrs, rapides et très fiables, car ils fournissent des adresses IP statiques à partir d’appareils enregistrés auprès des fournisseurs d’accès à l’internet. Les proxys de fournisseurs d’accès Internet sont également appelés proxys statiques résidentiels et constituent une solution parfaite pour le suivi du référencement et pour les études de marché.
  • Proxys mobiles : ces proxys fournissent des adresses IP provenant de véritables appareils mobiles pour un haut niveau d’anonymat. Ils permettent d’accéder à des applications, à des sites ou à du contenu spécialement conçus pour les appareils mobiles.

Ce n’était qu’un bref résumé, mais vous pouvez en savoir plus dans notre guide sur les types d’IP de proxy.

Conclusion

Ce guide sur les proxy dans PowerShell vous a appris ce qu’est Invoke-WebRequest, comment il fonctionne et comment l’utiliser avec un proxy HTTP/HTTPS/SOCKS. Malheureusement, on ne peut pas se fier aux proxys gratuits. Par conséquent, il ne vous reste plus qu’à choisir votre fournisseur de services de proxy. Gagnez du temps et de l’énergie en optant directement pour la meilleure solution sur le marché, Bright Data.

Bright Data détient les meilleurs serveurs proxys au monde, et vient en aide à des entreprises Fortune 500 et plus de 20 000 clients. Son réseau mondial de proxys comprend :

Il s’agit de l’un des réseaux de proxy axés sur le scraping les plus vastes et les plus fiables du marché. 

Adressez-vous à l’un de nos représentants commerciaux pour savoir quel produit de Bright Data répond le mieux à vos besoins.