Você já quis navegar na web via linha de comando? Sim. Eu também não. Mas você já precisou extrair informações de uma página da web, monitorar um site ou enviar informações via automação? Eu precisei e uso Invoke-Webrequest para fazer isso!
O cmdlet PowerShell Invoke-WebRequest
é o canivete suíço para a web. Esse cmdlet pode enviar qualquer verbo HTTP para um serviço web juntamente com coisas comuns como parâmetros HTTP, especificar diferentes cabeçalhos HTTP, e assim por diante. Invoke-WebRequest
juntamente com seu irmão, Invite-RestMethod
, são os dois cmdlets do PowerShell com os quais você vai querer se familiarizar se precisar fazer qualquer tipo de automação web.
O cmdlet Invoke-WebRequest
faz parte do módulo Microsoft.PowerShell.Utility que vem com o Windows PowerShell e o PowerShell Core. Esse cmdlet foi incluído no PowerShell desde a versão 3 e é extremamente poderoso, mas fácil de usar.
Ao usar Invoke-WebRequest
, o PowerShell permite que um desenvolvedor trabalhe com sites, serviços web e APIs REST de várias maneiras diferentes.
Uso Básico
No seu mais básico, o cmdlet Invoke-WebRequest
envia um método de requisição HTTP para um endpoint como uma URI ou URL. O cmdlet suporta todos os métodos de requisição comuns (request methods).
Até agora, o método mais comum é o método GET. Este método lê informações, como dados de um site ou talvez consulta a uma API REST. O método é definido usando o parâmetro Method
. Como precisamos de um ponto de extremidade para a consulta, também precisaremos de uma URI. Para facilitar, escolherei qualquer site. Para promover descaradamente o TechSnips, escolherei techsnips.io.
Digamos que eu queira obter uma lista de todos os vídeos mais recentes publicados, conforme mostrado abaixo.

I can get an HTML representation of this page by running Invoke-WebRequest -Uri 'https://techsnips.io' -Method GET
. When I do this, Invoke-WebRequest
downloads the entire web page and returns an output with various parsed information around the elements of the page.

Para obter os vídeos, precisarei cavar um pouco. Quando olho para a propriedade de links, vejo que todos os links de vídeo têm a classe ng-binding
, como mostrado abaixo.

Uma vez que sei disso, posso encontrar todos esses elementos e retornar apenas a propriedade innerHTML
, e voilà!

Download de arquivos com Invoke-WebRequest
Também podemos usar Invoke-WebRequest
para baixar arquivos da web, e é realmente fácil! Podemos baixar arquivos simplesmente apontando Invoke-WebRequest
para uma URI de um arquivo e usando o parâmetro OutFile
para dizer ao cmdlet para salvar o arquivo no disco local.
Como exemplo, abaixo estou baixando a utilidade SysInternals Handle e expandindo o arquivo zip depois de baixado. É realmente tão fácil!
Envio de um formulário e trabalho com sessões
Podemos usar Invoke-WebRequest
também para preencher formulários. Para fazer isso, geralmente precisamos trabalhar com sessões da web. HTTP é um protocolo naturalmente sem estado e seu navegador (neste caso, o PowerShell) deve ser capaz de criar uma sessão que será usada para rastrear coisas como cookies, por exemplo. Um formulário comum é um formulário de login/senha, então vamos fazer login em um site fictício!
Vamos dizer que nosso formulário de login fictício está no URL http://somewebsite.com. Primeiro, precisaríamos executar Invoke-WebRequest
para baixar a estrutura HTML e criar uma sessão.
Depois de fazer isso, a resposta terá uma propriedade Forms
que podemos então preencher com um nome de usuário e senha. Neste caso, o nome de usuário é representado por um campo chamado user
e a senha deve estar em um campo chamado password
. Isso dependerá da página da web.
Depois que o formulário for preenchido, podemos usar Invoke-WebRequest
novamente, mas desta vez reutilizar a sessão que acabamos de criar e automaticamente descobrir o URI para enviá-lo lendo a propriedade Action
que está no formulário, como mostrado abaixo.
Se você acertou todos os nomes dos campos apropriados e a página da web não estiver fazendo nada sofisticado, você deverá estar logado com o nome de usuário e senha dentro da sessão da web $rb
. Neste ponto, você pode ler várias páginas atrás dessa autenticação se usar a variável de sessão da web $rb
.
Resolvendo URIs Curtos
Finalmente, mais uma ótima utilização do Invoke-WebRequest
é resolver URIs curtas. Talvez você precise saber o que está por trás dessa URL encurtada, mas não queira clicar nela para descobrir! Sem problema. Usando o Invoke-WebRequest
, podemos ler a propriedade AbsoluteUri
a partir da resposta analisada que ele nos fornece!
Observe que abaixo estou também usando o parâmetro UseBasicParsing
. Por padrão, o Invoke-WebRequest
tenta usar o Internet Explorer (IE) para analisar o HTML retornado. Isso não funciona em sistemas sem IE. Para contornar isso, podemos usar o parâmetro UseBasicParsing
para baixar o conteúdo, mas apenas analisá-lo superficialmente.
Resumo
O cmdlet Invoke-WebRequest
é um dos mais versáteis que acompanham o PowerShell. Se há uma ação que pode ser realizada por meio de um navegador gráfico típico, o cmdlet Invoke-WebRequest
também pode fazê-la. Você pode encontrar um exemplo de uso deste cmdlet dando uma olhada neste artigo sobre monitoramento de APIs REST.