Partager via


Invoke-WebRequest

Obtient le contenu d’une page web sur Internet.

Syntaxe

Invoke-WebRequest
      [-UseBasicParsing]
      [-Uri] <Uri>
      [-WebSession <WebRequestSession>]
      [-SessionVariable <String>]
      [-Credential <PSCredential>]
      [-UseDefaultCredentials]
      [-CertificateThumbprint <String>]
      [-Certificate <X509Certificate>]
      [-UserAgent <String>]
      [-DisableKeepAlive]
      [-TimeoutSec <Int32>]
      [-Headers <IDictionary>]
      [-MaximumRedirection <Int32>]
      [-Method <WebRequestMethod>]
      [-Proxy <Uri>]
      [-ProxyCredential <PSCredential>]
      [-ProxyUseDefaultCredentials]
      [-Body <Object>]
      [-ContentType <String>]
      [-TransferEncoding <String>]
      [-InFile <String>]
      [-OutFile <String>]
      [-PassThru]
      [<CommonParameters>]

Description

L’applet de commande Invoke-WebRequest envoie des requêtes HTTP, HTTPS, FTP et FILE à une page web ou un service web. Il analyse la réponse et retourne des collections de formulaires, de liens, d’images et d’autres éléments HTML significatifs.

Cette applet de commande a été introduite dans Windows PowerShell 3.0.

Note

Par défaut, le code de script dans la page web peut être exécuté lorsque la page est analysée pour remplir la propriété ParsedHtml. Utilisez le commutateur -UseBasicParsing pour supprimer cela.

Exemples

Exemple 1 : Envoyer une requête web

Cette commande utilise l’applet de commande Invoke-WebRequest pour envoyer une requête web au site Bing.com.

$R = Invoke-WebRequest -URI https://www.bing.com?q=how+many+feet+in+a+mile
$R.AllElements | Where-Object {
    $_.name -like "* Value" -and $_.tagName -eq "INPUT"
} | Select-Object Name, Value

name       value
----       -----
From Value 1
To Value   5280

La première commande émet la requête et enregistre la réponse dans la variable $R.

La deuxième commande filtre les objets dans la propriété AllElements où la propriété nom est semblable à « * Value » et la tagName est « INPUT ». Les résultats filtrés sont redirigés vers Select-Object pour sélectionner le nom et valeur propriétés.

Exemple 2 : Utiliser un service web avec état

Cet exemple montre comment utiliser l’applet de commande Invoke-WebRequest avec un service web avec état, tel que Facebook.

$R = Invoke-WebRequest https://www.facebook.com/login.php -SessionVariable fb
# This command stores the first form in the Forms property of the $R variable in the $Form variable.
$Form = $R.Forms[0]
# This command shows the fields available in the Form.
$Form.fields

Key                     Value
---                     -----
...
email
pass
...

# These commands populate the username and password of the respective Form fields.
$Form.Fields["email"]="User01@Fabrikam.com"
$Form.Fields["pass"]="P@ssw0rd"
# This command creates the Uri that will be used to log in to facebook.
# The value of the Uri parameter is the value of the Action property of the form.
$Uri = "https://www.facebook.com" + $Form.Action
# Now the Invoke-WebRequest cmdlet is used to sign into the Facebook web service.
# The WebRequestSession object in the $FB variable is passed as the value of the WebSession parameter.
# The value of the Body parameter is the hash table in the Fields property of the form.
# The value of the *Method* parameter is POST. The command saves the output in the $R variable.
$R = Invoke-WebRequest -Uri $Uri -WebSession $FB -Method POST -Body $Form.Fields
$R.StatusDescription

La première commande utilise l’applet de commande Invoke-WebRequest pour envoyer une demande de connexion. La commande spécifie la valeur « FB » pour la valeur du paramètre SessionVariable et enregistre le résultat dans la variable $R. Une fois la commande terminée, la variable $R contient une HtmlWebResponseObject et la variable $FB contient un objet WebRequestSession.

Une fois que l’applet de commande Invoke-WebRequest se connecte à facebook, la propriété StatusDescription de l’objet de réponse web dans la variable $R indique que l’utilisateur est connecté correctement.

Exemple 3 : Obtenir des liens à partir d’une page web

Cette commande obtient les liens d’une page web.

(Invoke-WebRequest -Uri "https://devblogs.microsoft.com/powershell/").Links.Href

L’applet de commande Invoke-WebRequest obtient le contenu de la page web. Ensuite, la propriété Links du HtmlWebResponseObject retourné est utilisée pour afficher la propriété Href de chaque lien.

Exemple 4 : Intercepter les messages non réussis de Invoke-WebRequest

Lorsque Invoke-WebRequest rencontre un message HTTP non réussi (404, 500, etc.), il ne retourne aucune sortie et génère une erreur de fin. Pour intercepter l’erreur et afficher le StatusCode vous pouvez placer l’exécution dans un bloc try/catch. L’exemple suivant montre comment effectuer cette opération.

try
{
    $response = Invoke-WebRequest -Uri "www.microsoft.com/unkownhost" -ErrorAction Stop
    # This will only execute if the Invoke-WebRequest is successful.
    $StatusCode = $Response.StatusCode
}
catch
{
    $StatusCode = $_.Exception.Response.StatusCode.value__
}
$StatusCode

404

La première commande appelle Invoke-WebRequest avec un ErrorAction de Arrêter, ce qui force Invoke-WebRequest à lever une erreur de fin sur les demandes ayant échoué. L’erreur de fin est interceptée par le bloc qui récupère le StatusCode à partir de l’objet Exception.

Paramètres

-Body

Spécifie le corps de la requête. Le corps est le contenu de la requête qui suit les en-têtes. Vous pouvez également diriger une valeur de corps vers Invoke-WebRequest.

Le paramètre Body peut être utilisé pour spécifier une liste de paramètres de requête ou spécifier le contenu de la réponse.

Lorsque l’entrée est une requête GET et que le corps est un IDictionary (généralement, une table de hachage), le corps est ajouté à l’URI en tant que paramètres de requête. Pour les autres requêtes GET, le corps est défini comme valeur du corps de la requête au format standard name=value.

Lorsque le corps est un formulaire ou qu’il s’agit de la sortie d’un appel Invoke-WebRequest, PowerShell définit le contenu de la requête sur les champs du formulaire. Par exemple:

$r = Invoke-WebRequest https://website.com/login.aspx $r.Forms\[0\].Name = "MyName" $r.Forms\[0\].Password = "MyPassword" Invoke-RestMethod https://website.com/service.aspx -Body $r

  • ou-

Invoke-RestMethod https://website.com/service.aspx -Body $r.Forms\[0\]

Type:Object
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:True
Accepter les caractères génériques:False

-Certificate

Spécifie le certificat client utilisé pour une demande web sécurisée. Entrez une variable qui contient un certificat ou une commande ou une expression qui obtient le certificat.

Pour rechercher un certificat, utilisez Get-PfxCertificate ou utilisez l’applet de commande Get-ChildItem dans le lecteur Certificate (Cert:). Si le certificat n’est pas valide ou ne dispose pas d’une autorité suffisante, la commande échoue.

Type:X509Certificate
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-CertificateThumbprint

Spécifie le certificat de clé publique numérique (X509) d’un compte d’utilisateur autorisé à envoyer la demande. Entrez l’empreinte numérique du certificat. Les certificats sont utilisés dans l’authentification basée sur les certificats client. Ils ne peuvent être mappés qu’à des comptes d’utilisateur locaux ; ils ne fonctionnent pas avec les comptes de domaine.

Pour obtenir une empreinte numérique de certificat, utilisez la commande Get-Item ou Get-ChildItem dans le lecteur powerShell Cert:.

Type:String
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-ContentType

Spécifie le type de contenu de la requête web.

Si ce paramètre est omis et que la méthode de requête est POST, Invoke-WebRequest définit le type de contenu sur application/x-www-form-urlencoded. Sinon, le type de contenu n’est pas spécifié dans l’appel.

Type:String
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Credential

Spécifie un compte d’utilisateur autorisé à envoyer la demande. La valeur par défaut est l’utilisateur actuel.

Tapez un nom d’utilisateur, tel que User01 ou Domain01\User01, ou entrez un objet PSCredential, tel qu’un objet généré par l’applet de commande Get-Credential.

Type:PSCredential
Position:Named
Valeur par défaut:Current user
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-DisableKeepAlive

Indique que l’applet de commande définit la valeur KeepAlive dans l’en-tête HTTP sur False. Par défaut, KeepAlive est True. KeepAlive établit une connexion persistante au serveur pour faciliter les requêtes suivantes.

Type:SwitchParameter
Position:Named
Valeur par défaut:KeepAlive
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Headers

Spécifie les en-têtes de la requête web. Entrez une table de hachage ou un dictionnaire.

Pour définir en-têtes UserAgent, utilisez le paramètre UserAgent . Vous ne pouvez pas utiliser ce paramètre pour spécifier en-têtes UserAgent ou cookie.

Type:IDictionary
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-InFile

Obtient le contenu de la requête web à partir d’un fichier.

Entrez un chemin d’accès et un nom de fichier. Si vous omettez le chemin d’accès, la valeur par défaut est l’emplacement actuel.

Type:String
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-MaximumRedirection

Spécifie le nombre de fois où PowerShell redirige une connexion vers un autre URI (Uniform Resource Identifier) avant l’échec de la connexion. La valeur par défaut est 5. La valeur 0 (zéro) empêche toute redirection.

Type:Int32
Position:Named
Valeur par défaut:5
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Method

Spécifie la méthode utilisée pour la requête web. Les valeurs acceptables pour ce paramètre sont les suivantes :

  • Faire défaut
  • Supprimer
  • Avoir
  • Tête
  • Fusionner
  • Options
  • Rapiécer
  • Publier
  • Mettre
  • Trace
Type:WebRequestMethod
Valeurs acceptées:Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch
Position:Named
Valeur par défaut:Default
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-OutFile

Spécifie le fichier de sortie pour lequel cette applet de commande enregistre le corps de la réponse. Entrez un chemin d’accès et un nom de fichier. Si vous omettez le chemin d’accès, la valeur par défaut est l’emplacement actuel.

Par défaut, Invoke-WebRequest retourne les résultats au pipeline. Pour envoyer les résultats à un fichier et au pipeline, utilisez le paramètre Passthru.

Type:String
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-PassThru

Indique que l’applet de commande retourne les résultats, en plus de les écrire dans un fichier. Ce paramètre est valide uniquement lorsque le paramètre OutFile est également utilisé dans la commande.

Type:SwitchParameter
Position:Named
Valeur par défaut:False
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Proxy

Spécifie un serveur proxy pour la requête, au lieu de se connecter directement à la ressource Internet. Entrez l’URI d’un serveur proxy réseau.

Type:Uri
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-ProxyCredential

Spécifie un compte d’utilisateur autorisé à utiliser le serveur proxy spécifié par le paramètre Proxy. La valeur par défaut est l’utilisateur actuel.

Tapez un nom d’utilisateur, tel que User01 ou Domain01\User01, ou entrez un objet PSCredential, tel qu’un objet généré par l’applet de commande Get-Credential.

Ce paramètre est valide uniquement lorsque le paramètre proxy est également utilisé dans la commande. Vous ne pouvez pas utiliser les proxy ProxyCredential et ProxyUseDefaultCredentials paramètres dans la même commande.

Type:PSCredential
Position:Named
Valeur par défaut:Current user
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-ProxyUseDefaultCredentials

Indique que l’applet de commande utilise les informations d’identification de l’utilisateur actuel pour accéder au serveur proxy spécifié par le paramètre Proxy.

Ce paramètre est valide uniquement lorsque le paramètre proxy est également utilisé dans la commande. Vous ne pouvez pas utiliser les proxy ProxyCredential et ProxyUseDefaultCredentials paramètres dans la même commande.

Type:SwitchParameter
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-SessionVariable

Spécifie une variable pour laquelle cette applet de commande crée une session de requête web et l’enregistre dans la valeur. Entrez un nom de variable sans symbole dollar ($).

Lorsque vous spécifiez une variable de session, Invoke-WebRequest crée un objet de session de requête web et l’affecte à une variable portant le nom spécifié dans votre session PowerShell. Vous pouvez utiliser la variable dans votre session dès que la commande est terminée.

Contrairement à une session distante, la session de requête web n’est pas une connexion persistante. Il s’agit d’un objet qui contient des informations sur la connexion et la demande, notamment les cookies, les informations d’identification, la valeur de redirection maximale et la chaîne de l’agent utilisateur. Vous pouvez l’utiliser pour partager l’état et les données entre les requêtes web.

Pour utiliser la session de requête web dans les requêtes web suivantes, spécifiez la variable de session dans la valeur du paramètre WebSession. PowerShell utilise les données de l’objet de session de requête web lors de l’établissement de la nouvelle connexion. Pour remplacer une valeur dans la session de requête web, utilisez un paramètre d’applet de commande, tel que UserAgent ou Credential. Les valeurs des paramètres sont prioritaires sur les valeurs de la session de requête web.

Vous ne pouvez pas utiliser les paramètres SessionVariable et WebSession dans la même commande.

Type:String
Alias:SV
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-TimeoutSec

Spécifie la durée pendant laquelle la requête peut être en attente avant qu’elle expire. Entrez une valeur en secondes. La valeur par défaut, 0, spécifie un délai d’attente indéfini.

Une requête DNS (Domain Name System) peut prendre jusqu’à 15 secondes pour retourner ou expirer. Si votre requête contient un nom d’hôte nécessitant une résolution et que vous définissez TimeoutSec sur une valeur supérieure à zéro, mais moins de 15 secondes, il peut prendre 15 secondes ou plus avant qu’une WebException soit levée, et votre requête expire.

Type:Int32
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-TransferEncoding

Spécifie une valeur pour l’en-tête de réponse HTTP d’encodage de transfert. Les valeurs acceptables pour ce paramètre sont les suivantes :

  • Segmenté
  • Compresse
  • Dégonfler
  • GZip
  • Identité
Type:String
Valeurs acceptées:chunked, compress, deflate, gzip, identity
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Uri

Spécifie l’URI (Uniform Resource Identifier) de la ressource Internet à laquelle la requête web est envoyée. Entrez un URI. Ce paramètre prend en charge les valeurs HTTP, HTTPS, FTP et FILE.

Ce paramètre est requis.

Type:Uri
Position:0
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-UseBasicParsing

Indique que l’applet de commande utilise l’objet de réponse pour le contenu HTML sans analyse DOM (Document Object Model). Ce paramètre est requis quand Internet Explorer n’est pas installé sur les ordinateurs, par exemple sur une installation Server Core d’un système d’exploitation Windows Server.

Type:SwitchParameter
Position:Named
Valeur par défaut:False
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-UseDefaultCredentials

Indique que le cmdet utilise les informations d’identification de l’utilisateur actuel pour envoyer la requête web.

Type:SwitchParameter
Position:Named
Valeur par défaut:False
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-UserAgent

Spécifie une chaîne d’agent utilisateur pour la requête web. L’agent utilisateur par défaut est similaire à Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0 avec de légères variations pour chaque système d’exploitation et plateforme.

Pour tester un site web avec la chaîne d’agent utilisateur standard utilisée par la plupart des navigateurs Internet, utilisez les propriétés de la classe PSUserAgent, telle que Chrome, FireFox, InternetExplorer, Opera et Safari. Par exemple, la commande suivante utilise la chaîne de l’agent utilisateur pour Internet Explorer

Type:String
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-WebSession

Spécifie une session de requête web. Entrez le nom de la variable, y compris le signe dollar ($).

Pour remplacer une valeur dans la session de requête web, utilisez un paramètre d’applet de commande, tel que UserAgent ou Credential. Les valeurs des paramètres sont prioritaires sur les valeurs de la session de requête web.

Contrairement à une session distante, la session de requête web n’est pas une connexion persistante. Il s’agit d’un objet qui contient des informations sur la connexion et la demande, notamment les cookies, les informations d’identification, la valeur de redirection maximale et la chaîne de l’agent utilisateur. Vous pouvez l’utiliser pour partager l’état et les données entre les requêtes web.

Pour créer une session de requête web, entrez un nom de variable (sans une connexion dollar) dans la valeur du paramètre SessionVariable d’une commande Invoke-WebRequest. Invoke-WebRequest crée la session et l’enregistre dans la variable. Dans les commandes suivantes, utilisez la variable comme valeur du paramètre webSession .

Vous ne pouvez pas utiliser les paramètres SessionVariable et WebSession dans la même commande.

Type:WebRequestSession
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

Entrées

Object

Vous pouvez diriger le corps d’une requête web vers Invoke-WebRequest.

Sorties

HtmlWebResponseObject