Compartir a través de


Invoke-WebRequest

Obtiene contenido de una página web en Internet.

Sintaxis

Default (valor predeterminado)

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

El cmdlet Invoke-WebRequest envía solicitudes HTTP, HTTPS, FTP y FILE a una página web o servicio web. Analiza la respuesta y devuelve colecciones de formularios, vínculos, imágenes y otros elementos HTML significativos.

Este cmdlet se introdujo en Windows PowerShell 3.0.

Nota:

De forma predeterminada, el código de script de la página web se puede ejecutar cuando se analiza la página para rellenar la propiedad ParsedHtml. Use el modificador -UseBasicParsing para suprimirlo.

Ejemplos

Ejemplo 1: Envío de una solicitud web

Este comando usa el cmdlet Invoke-WebRequest para enviar una solicitud web al sitio de 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

El primer comando emite la solicitud y guarda la respuesta en la variable $R.

El segundo comando filtra los objetos de propiedad AllElements donde el nombre propiedad es como "* Value" y el tagName es "INPUT". Los resultados filtrados se canalizan a Select-Object para seleccionar el nombre de y valor propiedades.

Ejemplo 2: Uso de un servicio web con estado

En este ejemplo se muestra cómo usar el cmdlet Invoke-WebRequest con un servicio web con estado, como 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

El primer comando usa el cmdlet Invoke-WebRequest para enviar una solicitud de inicio de sesión. El comando especifica un valor de "FB" para el valor del parámetro SessionVariable y guarda el resultado en la variable $R. Cuando se completa el comando, la variable contiene un HtmlWebResponseObject y la variable contiene un objeto WebRequestSession.

Después de que el cmdlet Invoke-WebRequest inicie sesión en Facebook, la propiedad StatusDescription del objeto de respuesta web en la variable $R indica que el usuario ha iniciado sesión correctamente.

Ejemplo 3: Obtener vínculos de una página web

Este comando obtiene los vínculos de una página web.

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

El cmdlet Invoke-WebRequest obtiene el contenido de la página web. A continuación, se usa la propiedad Links del HtmlWebResponseObject para mostrar la propiedad Href de cada vínculo.

Ejemplo 4: Detectar mensajes no correctos de Invoke-WebRequest

Cuando Invoke-WebRequest encuentra un mensaje HTTP no correcto (404, 500, etc.), no devuelve ninguna salida y produce un error de terminación. Para detectar el error y ver el StatusCode puede incluir la ejecución en un bloque de try/catch. En el ejemplo siguiente se muestra cómo hacerlo.

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

El primer comando llama a Invoke-WebRequest con un ErrorAction de Detener, lo que obliga a Invoke-WebRequest a producir un error de terminación en las solicitudes con error. El bloque detecta el error de terminación, que recupera el StatusCode de del objeto Exception .

Parámetros

-Body

Especifica el cuerpo de la solicitud. El cuerpo es el contenido de la solicitud que sigue a los encabezados. También puede enviar un valor de cuerpo a Invoke-WebRequest.

El parámetro Body se puede usar para especificar una lista de parámetros de consulta o especificar el contenido de la respuesta.

Cuando la entrada es una solicitud GET y el cuerpo es un IDictionary (normalmente, una tabla hash), el cuerpo se agrega al URI como parámetros de consulta. Para otras solicitudes GET, el cuerpo se establece como el valor del cuerpo de la solicitud en el formato estándar name=value.

Cuando el cuerpo es un formulario o es la salida de una llamada a Invoke-WebRequest, PowerShell establece el contenido de la solicitud en los campos del formulario. Por ejemplo:

$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

  • o -

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

Propiedades de parámetro

Tipo:Object
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:True
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-Certificate

Especifica el certificado de cliente que se usa para una solicitud web segura. Escriba una variable que contenga un certificado o un comando o expresión que obtenga el certificado.

Para buscar un certificado, use o use el cmdlet en la unidad certificado de (). Si el certificado no es válido o no tiene suficiente autoridad, se produce un error en el comando.

Propiedades de parámetro

Tipo:X509Certificate
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-CertificateThumbprint

Especifica el certificado de clave pública digital (X509) de una cuenta de usuario que tiene permiso para enviar la solicitud. Escriba la huella digital del certificado. Los certificados se usan en la autenticación basada en certificados de cliente. Solo se pueden asignar a cuentas de usuario locales; no funcionan con cuentas de dominio.

Para obtener una huella digital de certificado, use el comando Get-Item o Get-ChildItem en la unidad de Cert: de PowerShell.

Propiedades de parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-ContentType

Especifica el tipo de contenido de la solicitud web.

Si se omite este parámetro y el método de solicitud es POST, Invoke-WebRequest establece el tipo de contenido en application/x-www-form-urlencoded. De lo contrario, el tipo de contenido no se especifica en la llamada.

Propiedades de parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-Credential

Especifica una cuenta de usuario que tiene permiso para enviar la solicitud. El valor predeterminado es el usuario actual.

Escriba un nombre de usuario, como User01 o Domain01\User01, o escriba un objeto de PSCredential de, como uno generado por el cmdlet Get-Credential.

Propiedades de parámetro

Tipo:PSCredential
Valor predeterminado:Current user
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-DisableKeepAlive

Indica que el cmdlet establece el valor de KeepAlive en el encabezado HTTP en False. De forma predeterminada, el KeepAlive de es True. KeepAlive establece una conexión persistente con el servidor para facilitar las solicitudes posteriores.

Propiedades de parámetro

Tipo:SwitchParameter
Valor predeterminado:KeepAlive
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-Headers

Especifica los encabezados de la solicitud web. Especifique una tabla hash o un diccionario.

Para establecer encabezados de UserAgent, use el parámetro UserAgent. No puede usar este parámetro para especificar encabezados de cookies o UserAgent.

Propiedades de parámetro

Tipo:IDictionary
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-InFile

Obtiene el contenido de la solicitud web de un archivo.

Escriba una ruta de acceso y un nombre de archivo. Si omite la ruta de acceso, el valor predeterminado es la ubicación actual.

Propiedades de parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-MaximumRedirection

Especifica cuántas veces PowerShell redirige una conexión a un identificador uniforme de recursos (URI) alternativo antes de que se produzca un error en la conexión. El valor predeterminado es 5. Un valor de 0 (cero) impide toda la redirección.

Propiedades de parámetro

Tipo:Int32
Valor predeterminado:5
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-Method

Especifica el método usado para la solicitud web. Los valores aceptables para este parámetro son:

  • Predeterminado
  • Borrar
  • Obtener
  • Head
  • Fusionar
  • Opciones
  • Revisión
  • Publicar
  • Put
  • Seguimiento

Propiedades de parámetro

Tipo:WebRequestMethod
Valor predeterminado:Default
Valores aceptados:Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-OutFile

Especifica el archivo de salida para el que este cmdlet guarda el cuerpo de la respuesta. Escriba una ruta de acceso y un nombre de archivo. Si omite la ruta de acceso, el valor predeterminado es la ubicación actual.

De forma predeterminada, Invoke-WebRequest devuelve los resultados a la canalización. Para enviar los resultados a un archivo y a la canalización, use el parámetro Passthru.

Propiedades de parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-PassThru

Indica que el cmdlet devuelve los resultados, además de escribirlos en un archivo. Este parámetro solo es válido cuando el parámetro OutFile también se usa en el comando .

Propiedades de parámetro

Tipo:SwitchParameter
Valor predeterminado:False
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-Proxy

Especifica un servidor proxy para la solicitud, en lugar de conectarse directamente al recurso de Internet. Escriba el URI de un servidor proxy de red.

Propiedades de parámetro

Tipo:Uri
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-ProxyCredential

Especifica una cuenta de usuario que tiene permiso para usar el servidor proxy especificado por el parámetro Proxy . El valor predeterminado es el usuario actual.

Escriba un nombre de usuario, como User01 o Domain01\User01, o escriba un objeto de PSCredential de, como uno generado por el cmdlet Get-Credential.

Este parámetro solo es válido cuando el parámetro proxy también es usado en el comando. No puede usar el proxyCredential de y proxyUseDefaultCredentials parámetros en el mismo comando.

Propiedades de parámetro

Tipo:PSCredential
Valor predeterminado:Current user
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-ProxyUseDefaultCredentials

Indica que el cmdlet usa las credenciales del usuario actual para acceder al servidor proxy especificado por el parámetro Proxy.

Este parámetro solo es válido cuando el parámetro proxy también es usado en el comando. No puede usar el proxyCredential de y proxyUseDefaultCredentials parámetros en el mismo comando.

Propiedades de parámetro

Tipo:SwitchParameter
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-SessionVariable

Especifica una variable para la que este cmdlet crea una sesión de solicitud web y la guarda en el valor . Escriba un nombre de variable sin el símbolo de signo de dólar ($).

Al especificar una variable de sesión, Invoke-WebRequest crea un objeto de sesión de solicitud web y lo asigna a una variable con el nombre especificado en la sesión de PowerShell. Puede usar la variable en la sesión tan pronto como se complete el comando.

A diferencia de una sesión remota, la sesión de solicitud web no es una conexión persistente. Es un objeto que contiene información sobre la conexión y la solicitud, incluidas las cookies, las credenciales, el valor de redireccionamiento máximo y la cadena del agente de usuario. Puede usarlo para compartir el estado y los datos entre las solicitudes web.

Para usar la sesión de solicitud web en solicitudes web posteriores, especifique la variable de sesión en el valor del parámetro WebSession. PowerShell usa los datos del objeto de sesión de solicitud web al establecer la nueva conexión. Para invalidar un valor en la sesión de solicitud web, use un parámetro de cmdlet, como UserAgent o Credential. Los valores de parámetro tienen prioridad sobre los valores de la sesión de solicitud web.

No puede usar los parámetros SessionVariable y WebSession en el mismo comando.

Propiedades de parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False
Alias:SV

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-TimeoutSec

Especifica cuánto tiempo puede estar pendiente la solicitud antes de que se agote el tiempo de espera. Escriba un valor en segundos. El valor predeterminado, 0, especifica un tiempo de espera indefinido.

Una consulta del Sistema de nombres de dominio (DNS) puede tardar hasta 15 segundos en devolverse o agotar el tiempo de espera. Si la solicitud contiene un nombre de host que requiere resolución y establece TimeoutSec en un valor mayor que cero, pero menos de 15 segundos, puede tardar 15 segundos o más antes de que se produzca un webException y se agote el tiempo de espera de la solicitud.

Propiedades de parámetro

Tipo:Int32
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-TransferEncoding

Especifica un valor para el encabezado de respuesta HTTP de codificación de transferencia. Los valores aceptables para este parámetro son:

  • Chunked
  • Comprimir
  • Deflate
  • GZip
  • identidad

Propiedades de parámetro

Tipo:String
Valor predeterminado:None
Valores aceptados:chunked, compress, deflate, gzip, identity
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-Uri

Especifica el identificador uniforme de recursos (URI) del recurso de Internet al que se envía la solicitud web. Escriba un URI. Este parámetro admite valores HTTP, HTTPS, FTP y FILE.

Este parámetro es obligatorio.

Propiedades de parámetro

Tipo:Uri
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:0
Obligatorio:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-UseBasicParsing

Indica que el cmdlet usa el objeto de respuesta para el contenido HTML sin el análisis del Modelo de objetos de documento (DOM). Este parámetro es necesario cuando Internet Explorer no está instalado en los equipos, como en una instalación Server Core de un sistema operativo Windows Server.

Propiedades de parámetro

Tipo:SwitchParameter
Valor predeterminado:False
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-UseDefaultCredentials

Indica que el cmdet usa las credenciales del usuario actual para enviar la solicitud web.

Propiedades de parámetro

Tipo:SwitchParameter
Valor predeterminado:False
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-UserAgent

Especifica una cadena de agente de usuario para la solicitud web. El agente de usuario predeterminado es similar a Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0 con ligeras variaciones para cada sistema operativo y plataforma.

Para probar un sitio web con la cadena de agente de usuario estándar que usa la mayoría de los exploradores de Internet, use las propiedades de la clase PSUserAgent , como Chrome, FireFox, InternetExplorer, Opera y Safari. Por ejemplo, el comando siguiente usa la cadena del agente de usuario para Internet Explorer.

Propiedades de parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-WebSession

Especifica una sesión de solicitud web. Escriba el nombre de la variable, incluido el signo de dólar ($).

Para invalidar un valor en la sesión de solicitud web, use un parámetro de cmdlet, como UserAgent o Credential. Los valores de parámetro tienen prioridad sobre los valores de la sesión de solicitud web.

A diferencia de una sesión remota, la sesión de solicitud web no es una conexión persistente. Es un objeto que contiene información sobre la conexión y la solicitud, incluidas las cookies, las credenciales, el valor de redireccionamiento máximo y la cadena del agente de usuario. Puede usarlo para compartir el estado y los datos entre las solicitudes web.

Para crear una sesión de solicitud web, escriba un nombre de variable (sin un signo de dólar) en el valor de la SessionVariable parámetro de un comando Invoke-WebRequest. Invoke-WebRequest crea la sesión y la guarda en la variable . En los comandos posteriores, use la variable como valor del parámetro WebSession.

No puede usar los parámetros SessionVariable y WebSession en el mismo comando.

Propiedades de parámetro

Tipo:WebRequestSession
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

CommonParameters

Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.

Entradas

Object

Puede canalizar el cuerpo de una solicitud web para Invoke-WebRequest.

Salidas

HtmlWebResponseObject