À la fin de ce guide d’utilisation de PowerShell Invoke-WebRequest avec proxy., vous saurez :
- Ce qu’est Invoke-WebRequest
- Comment l’utiliser sous Windows, macOS et Linux.
- Ce que vous devez savoir avant d’utiliser un proxy dans PowerShell.
- Comment définir un proxy HTTP dans Invoke-WebRequest.
- Comment gérer les proxys HTTPS et SOCKS.
- Comment utiliser les proxys dans PowerShell comme un pro.
- Quel type de proxy choisir.
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
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
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
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
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 :
- Proxys de centre de données — Plus de 770 000 adresses IP de datacenters.
- Proxys résidentiels — Plus de 72 millions d’adresses IP résidentielles dans plus de 195 pays.
- Proxys de fournisseurs d’accès à Internet — Plus de 700 000 adresses IP de fournisseurs d’accès Internet.
- Proxys mobiles — Plus de 7 millions d’adresses IP mobiles.
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.
Aucune carte de crédit requise