Existe um equivalente curl
no PowerShell? Possui algum recurso interno semelhante ou existe um cmdlet de terceiros?
Existe um equivalente curl
no PowerShell? Possui algum recurso interno semelhante ou existe um cmdlet de terceiros?
Respostas:
O PowerShell 3.0 tem o novo comando Invoke-RestMethod
:
http://technet.microsoft.com/en-us/library/hh849971.aspx
Mais detalhes:
https://discoposse.com/2012/06/30/powershell-invoke-restmethod-putting-the-curl-in-your-shell/
curl
ou wget
no PowerShell agora.
A partir do Powershell 5.0, se não antes, curl
é um alias para Invoke-WebRequest
.
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias curl -> Invoke-WebRequest
Alias iwr -> Invoke-WebRequest
Alias wget -> Invoke-WebRequest
Para usar o comando sem serrilhado ...
PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com
Portanto, retorne várias propriedades da solicitação da seguinte maneira ...
PS> Invoke-WebRequest -Uri https://www.google.com
StatusCode : 200
StatusDescription : OK
Content : <!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-AU"><head><meta content="text/html; charset=UTF-8"
http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/...
RawContent : HTTP/1.1 200 OK
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Vary: Accept-Encoding
... ou apenas o conteúdo ...
PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content
<!doctype html><html itemscope="" itemtype="http://schem[etc ...]
Os comandos com alias equivalentes são ...
PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content
Aproveitando os padrões do Powershell e outros aliases, você pode reduzir os comandos para
PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content
... mas eu não recomendaria. Os comandos detalhados ajudam outras pessoas ao ler seu código.
Atualizar:
A partir do Powershell 6.x, "Core" curl
não é mais um alias para Invoke-WebRequest
(o alias wget
também é removido). Em vez disso, use Invoke-WebRequest
diretamente.
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias iwr -> Invoke-WebRequest
A ondulação não é mais um alias para Invoke-WebRequest (testado no Powershell 6.2.3), apesar de uma aparente rejeição de um movimento em uma RFC "para remover os aliases ondulados e wget do Windows PowerShell" .
Que a RFC observa "Os aliases wget / curl já foram removidos do PowerShell Core, portanto o problema [de ter esses aliases] foi limitado ao Windows PowerShell".
Na conclusão, a equipe do Powershell também incentiva os usuários "a não confiarem em aliases nos scripts".
Como o @ v6ak observou nos comentários, o uso curl
e wget
no PowerShell (5.0 ou inferior) pode ser um problema: involuntariamente involuntariamente o real curl ou wget, se instalado lado a lado; e, em qualquer caso, causa confusão.
Recomenda-se atualizar o "core" do Powershell (6.x ou superior) para aproveitar a codificação padrão utf8NoBOM
ao usar Invoke-WebRequest
(e muitos outros comandos de saída de texto). Se alguém estivesse fazendo isso explicitamente, você poderia fazer algo como:
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
| Select-Object -ExpandProperty Content `
| Out-File jquery.fancybox.min.js `
-Encoding utf8NoBOM
No entanto, mesmo ao usar um comando mais curto, implícito, ...
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js
... a codificação utf8NoBOM
será feita (você pode verificar isso, por exemplo, abrindo o arquivo salvo no Visual Studio Code e observando "UTF-8" na barra de status).
Os arquivos salvos utf8NoBOM
tendem a causar menos problemas ao viajar por vários ecossistemas. Obviamente, se você precisar de outra codificação, poderá definir algumas alternativas explicitamente.
No Powershell 5.0 e inferior, a utf8NoBOM
codificação não estava disponível, muito menos o padrão.
Detalhes:
get-help curl
. Você verá que Invoke-WebRequest [-Uri] <Uri> ...
, com os colchetes, a []
indicação -Uri
pode ser deixada de fora (e, portanto, implicitamente invocada). Como mencionei no post principal: em geral, você deve ser explícito (onde você ou outras pessoas vão ler seu código no futuro).
[]
fez
get-help
são fornecidas em algumas versões do en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form . Você fará bem em ler / ler isso porque, provavelmente, uma versão do Extended Backus Naur Form é usada para descrever a sintaxe de muitos idiomas que você encontrará. Você notará que, em en.wikipedia.org/wiki/…, colchetes [ ...]
designam sintaxe opcional.
O excelente blog Kung Fu da linha de comando tem uma postagem na qual eles comparam curl, wget e os comandos relacionados do PowerShell
Em poucas palavras:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")
Ou, se sua versão do Powershell / .Net não aceitar 2 parâmetros para DownloadString
:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"
DownloadFile
função que também funciona bem.
Você também pode instalar o Git for Windows e, em seguida, colocar a pasta bin Git no seu caminho. A instalação do Git inclui, entre outras coisas, curl.exe. Após a instalação, basta colocar %programfiles(x86)%\git\bin
no seu PATH. Em seguida, você poderá usar o comando curl no prompt de comando do Windows ou no console do PowerShell.
Você pode instalar o cURL com Chocolatey e ter a ondulação disponível na CLI do PowerShell ou cmd
.
o mais próximo wget
ou curl
no Windows são os bits (Serviço de transferência inteligente em segundo plano), que possui alguns trechos prontos para o PowerShell.
Este comando deve funcionar:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
Faz parte do Microsoft.PowerShell.Utility desde o PowerShell 3.0.
Veja também: Faça com que $ webclient.downloadstring grave no arquivo de texto no Powershell .