Condividi tramite


Invoke-WebRequest

Ottiene il contenuto di una pagina Web su Internet.

Sintassi

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>]

Descrizione

Il Invoke-WebRequest cmdlet invia richieste HTTP, HTTPS, FTP e FILE a una pagina Web o a un servizio Web. Analizza la risposta e restituisce raccolte di moduli, collegamenti, immagini e altri elementi HTML significativi.

Questo cmdlet è stato introdotto in Windows PowerShell 3.0.

Nota

Per impostazione predefinita, il codice script nella pagina Web può essere eseguito quando la pagina viene analizzata per popolare la ParsedHtml proprietà. Usare l'opzione per eliminare questa -UseBasicParsing operazione.

Esempio

Esempio 1: Inviare una richiesta Web

Questo comando usa il Invoke-WebRequest cmdlet per inviare una richiesta Web al sito 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

Il primo comando genera la richiesta e salva la risposta nella $R variabile.

Il secondo comando filtra gli oggetti nella proprietà AllElements in cui la proprietà name è simile a "* Value" e il tagName è "INPUT". I risultati filtrati vengono inviati tramite pipe per Select-Object selezionare il nome e le proprietà del valore .

Esempio 2: Usare un servizio Web con stato

In questo esempio viene illustrato come usare il Invoke-WebRequest cmdlet con un servizio Web con stato, ad esempio 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

Il primo comando usa il Invoke-WebRequest cmdlet per inviare una richiesta di accesso. Il comando specifica un valore "FB" per il valore del parametro SessionVariable e salva il risultato nella $R variabile. Al termine del comando, la $R variabile contiene un oggetto HtmlWebResponseObject e la $FB variabile contiene un oggetto WebRequestSession .

Dopo l'accesso del Invoke-WebRequest cmdlet a facebook, la proprietà StatusDescription dell'oggetto risposta Web nella $R variabile indica che l'utente è connesso correttamente.

Esempio 3: Ottenere collegamenti da una pagina Web

Questo comando ottiene i collegamenti inclusi in una pagina Web.

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

Il Invoke-WebRequest cmdlet ottiene il contenuto della pagina Web. Viene quindi usata la proprietà Linksdell'oggetto HtmlWebResponseObject restituito per visualizzare la proprietà Href di ogni collegamento.

Esempio 4: Rilevare messaggi non riusciti da Invoke-WebRequest

Quando Invoke-WebRequest si verifica un messaggio HTTP non riuscito (404, 500 e così via), non restituisce alcun output e genera un errore di terminazione. Per rilevare l'errore e visualizzare statusCode , è possibile racchiudere l'esecuzione in un try/catch blocco. Nell'esempio seguente viene illustrato come eseguire questa operazione.

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

Il primo comando chiama Invoke-WebRequest con un errore ErrorAction of Stop, che forza Invoke-WebRequest a generare un errore di terminazione in qualsiasi richiesta non riuscita. L'errore di terminazione viene rilevato dal catch blocco che recupera statusCode dall'oggetto Exception .

Parametri

-Body

Specifica il corpo della richiesta. Il corpo corrisponde al contenuto della richiesta che segue le intestazioni. È anche possibile inviare un valore del corpo a Invoke-WebRequest.

Il parametro Body può essere usato per specificare un elenco di parametri di query o il contenuto della risposta.

Quando l'input è una richiesta GET e il corpo è un IDictionary (in genere, una tabella hash), il corpo viene aggiunto all'URI come parametri di query. Per altre richieste GET, il corpo viene impostato come valore del corpo della richiesta nel formato standard name=value .

Quando il corpo è un modulo oppure è l'output di una Invoke-WebRequest chiamata, PowerShell imposta il contenuto della richiesta sui campi del modulo. Ad esempio:

$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

  • - oppure -

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

Type:Object
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Certificate

Specifica il certificato client usato per una richiesta Web sicura. Immettere una variabile che contiene un certificato oppure un comando o un'espressione che ottiene il certificato.

Per trovare un certificato, usare o usare Get-PfxCertificate il cmdlet nell'unità Get-ChildItemCertificato (Cert:). Se il certificato non è valido o non ha autorizzazioni sufficienti, il comando non riesce.

Type:X509Certificate
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CertificateThumbprint

Specifica il certificato di chiave pubblica digitale (X509) di un account utente con autorizzazione per l'invio della richiesta. Immettere l'identificazione personale del certificato del certificato. I certificati vengono usati nell'autenticazione basata su certificati client. Possono essere mappati solo ad account utente locali. Non funzionano con gli account di dominio.

Per ottenere un'identificazione personale del certificato, usare il Get-Item comando o Get-ChildItem nell'unità di PowerShell Cert: .

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ContentType

Specifica il tipo di contenuto della richiesta Web.

Se questo parametro viene omesso e il metodo di richiesta è POST, Invoke-WebRequest imposta il tipo di contenuto su application/x-www-form-urlencoded. In caso contrario, il tipo di contenuto non viene specificato nella chiamata.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

Specifica un account utente che dispone dell'autorizzazione per l'invio della richiesta. Il valore predefinito è l'utente corrente.

Digitare un nome utente, ad esempio o Domain01\User01o immettere un oggetto PSCredential, ad esempio User01 uno generato dal Get-Credential cmdlet.

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DisableKeepAlive

Indica che il cmdlet imposta il valore KeepAlive nell'intestazione HTTP su False. Per impostazione predefinita, KeepAlive è True. KeepAlive stabilisce una connessione permanente al server per semplificare le richieste successive.

Type:SwitchParameter
Position:Named
Default value:KeepAlive
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Headers

Specifica le intestazioni della richiesta Web. Immettere una tabella hash o un dizionario.

Per impostare le intestazioni UserAgent , usare il parametro UserAgent . Non è possibile usare questo parametro per specificare intestazioni userAgent o cookie.

Type:IDictionary
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InFile

Ottiene il contenuto della richiesta Web da un file.

Immettere un percorso e un nome file. Se si omette il percorso, l'impostazione predefinita è il percorso corrente.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaximumRedirection

Specifica il numero di volte in cui PowerShell reindirizza una connessione a un URI (Uniform Resource Identifier) alternativo prima dell'esito negativo della connessione. Il valore predefinito è 5. Il valore 0 (zero) impedisce qualsiasi reindirizzamento.

Type:Int32
Position:Named
Default value:5
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Method

Specifica il metodo usato per la richiesta Web. I valori validi per questo parametro sono:

  • Default
  • Delete
  • Recupero
  • Head
  • Unione
  • Opzioni
  • Patch
  • Pubblica
  • Put
  • Trace
Type:WebRequestMethod
Accepted values:Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch
Position:Named
Default value:Default
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OutFile

Specifica il file di output per cui questo cmdlet salva il corpo della risposta. Immettere un percorso e un nome file. Se si omette il percorso, l'impostazione predefinita è il percorso corrente.

Per impostazione predefinita, Invoke-WebRequest restituisce i risultati della pipeline. Per inviare i risultati a un file e alla pipeline, usare il parametro Passthru.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PassThru

Indica che il cmdlet restituisce i risultati, oltre a scriverli in un file. Questo parametro è valido solo quando nel comando viene usato anche il parametro OutFile.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Proxy

Specifica un server proxy per la richiesta, anziché connettersi direttamente alla risorsa Internet. Immettere l'URI di un server proxy di rete.

Type:Uri
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ProxyCredential

Specifica un account utente con autorizzazioni per l'uso del server proxy specificato dal parametro Proxy. Il valore predefinito è l'utente corrente.

Digitare un nome utente, ad esempio o Domain01\User01o immettere un oggetto PSCredential, ad esempio User01 uno generato dal Get-Credential cmdlet.

Questo parametro è valido solo quando il parametro Proxy viene usato anche nel comando. Non è possibile usare i parametri ProxyCredential e ProxyUseDefaultCredentials nello stesso comando.

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ProxyUseDefaultCredentials

Indica che il cmdlet usa le credenziali dell'utente corrente per accedere al server proxy specificato dal parametro Proxy .

Questo parametro è valido solo quando il parametro Proxy viene usato anche nel comando. Non è possibile usare i parametri ProxyCredential e ProxyUseDefaultCredentials nello stesso comando.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SessionVariable

Specifica una variabile per la quale questo cmdlet crea una sessione di richiesta Web e la salva nel valore . Immettere un nome di variabile senza il simbolo del simbolo del dollaro ($).

Quando si specifica una variabile di sessione, Invoke-WebRequest crea un oggetto sessione di richiesta Web e lo assegna a una variabile con il nome specificato nella sessione di PowerShell. È possibile usare la variabile nella sessione appena il comando termina l'esecuzione.

A differenza di una sessione remota, la sessione di richieste Web non è una connessione permanente. Si tratta di un oggetto che contiene le informazioni sulla connessione e sulla richiesta, inclusi cookie, credenziali, il valore massimo di reindirizzamento e la stringa agente utente. È possibile usarlo per condividere lo stato e i dati tra le richieste Web.

Per usare la sessione di richieste Web in richieste Web successive, specificare la variabile di sessione nel valore del parametro WebSession. PowerShell usa i dati nell'oggetto sessione di richiesta Web quando si stabilisce la nuova connessione. Per eseguire l'override di un valore nella sessione di richieste Web, usare un parametro del cmdlet come UserAgent o Credential. I valori di parametro hanno la precedenza sui valori nella sessione di richieste Web.

Non è possibile usare i parametri SessionVariable e WebSession nello stesso comando.

Type:String
Aliases:SV
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TimeoutSec

Specifica per quanto tempo la richiesta può essere in sospeso prima del timeout. Immettere un valore in secondi. Il valore predefinito, 0, specifica un timeout indefinito.

La restituzione o il timeout di una query DNS (Domain Name System) può richiedere fino a 15 secondi. Se la richiesta contiene un nome host che richiede la risoluzione e si imposta TimeoutSec su un valore maggiore di zero, ma meno di 15 secondi, possono essere necessari 15 secondi o più prima che venga generata un'eccezione WebException e il timeout della richiesta.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TransferEncoding

Specifica un valore per l'intestazione della risposta HTTP con codifica di trasferimento. I valori validi per questo parametro sono:

  • Chunked
  • Comprimi
  • Deflate
  • GZip
  • Identità
Type:String
Accepted values:chunked, compress, deflate, gzip, identity
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Uri

Specifica l'URI (Uniform Resource Identifier) della risorsa Internet alla quale viene inviata la richiesta Web. Immettere un URI. Questo parametro supporta i valori HTTP, HTTPS, FTP e FILE.

Questo parametro è obbligatorio.

Type:Uri
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-UseBasicParsing

Indica che il cmdlet usa l'oggetto risposta per il contenuto HTML senza l'analisi dom (Document Object Model). Questo parametro è obbligatorio quando Internet Explorer non è installato nei computer, ad esempio in un'installazione dei componenti di base di un sistema operativo Windows Server.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseDefaultCredentials

Indica che il cmdet usa le credenziali dell'utente corrente per inviare la richiesta Web.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UserAgent

Specifica una stringa agente utente per la richiesta Web. L'agente utente predefinito è simile a Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0 con lievi variazioni per ogni sistema operativo e piattaforma.

Per testare un sito Web con la stringa dell'agente utente standard usata dalla maggior parte dei browser Internet, usare le proprietà della classe PSUserAgent , ad esempio Chrome, FireFox, InternetExplorer, Opera e Safari. Ad esempio, il comando seguente usa la stringa dell'agente utente per Internet Explorer

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WebSession

Specifica una sessione di richieste Web. Immettere il nome della variabile, incluso il segno di dollaro ($).

Per eseguire l'override di un valore nella sessione di richieste Web, usare un parametro del cmdlet come UserAgent o Credential. I valori di parametro hanno la precedenza sui valori nella sessione di richieste Web.

A differenza di una sessione remota, la sessione di richieste Web non è una connessione permanente. Si tratta di un oggetto che contiene le informazioni sulla connessione e sulla richiesta, inclusi cookie, credenziali, il valore massimo di reindirizzamento e la stringa agente utente. È possibile usarlo per condividere lo stato e i dati tra le richieste Web.

Per creare una sessione di richiesta Web, immettere un nome di variabile (senza un segno di dollaro) nel valore del parametro SessionVariable di un Invoke-WebRequest comando. Invoke-WebRequest crea la sessione e la salva nella variabile . Nei comandi successivi, usare la variabile come valore del parametro WebSession.

Non è possibile usare i parametri SessionVariable e WebSession nello stesso comando.

Type:WebRequestSession
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

Object

È possibile inviare il corpo di una richiesta Web a Invoke-WebRequest.

Output

HtmlWebResponseObject