Questão Equivalente ao PowerShell de ondulação


Existe um equivalente de curl no PowerShell? Tem algum recurso interno semelhante ou há um cmdlet de terceiros?


105


origem


Fechadas? Que tal fechar superuser.com/questions/34492/…, superuser.com/questions/295021/…, superuser.com/questions/71446/… e host de outros? - Borek Bernard
Na verdade, esta pergunta parece bastante justa para mim? Mas há uma resposta antiga: stackoverflow.com/questions/340553/… - Rup
@Spoike Nice solução, você deve publicá-lo como uma resposta. - Borek Bernard
Confira este artigo sobre como usar o curl no PowerShell: thesociablegeek.com/azure/using-curl-in-powershell - SDsolar


Respostas:


O PowerShell 3.0 tem o novo comando Invoke-RestMethod:

http://technet.microsoft.com/pt-br/library/hh849971.aspx

Mais detalhes:

https://discoposse.com/2012/06/30/powershell-invoke-restmethod-putting-the-curl-in-your-shell/


71



Você pode querer o comando Invoke-WebRequest, dependendo do que você está tentando realizar. - Timothy Lee Russell
Também é aliado como curl ou wget em Powershell agora. - CMCDragonkai
É bizarro que eles os aliassem, já que a sintaxe é completamente diferente. Se o MS não quiser enviar um gerenciador de pacotes e facilitar a obtenção de ferramentas comuns e básicas, ocultá-lo por trás de um falso apelido não melhorará a situação. - MichaelGG
O maior problema com o Invoke-WebRequest é que ele não funciona se o IE não for 'inicializado'; Portanto, ao escrever um pipeline ou scripts DSC, você precisa fazer um trabalho extra ou primeiro, você pode usar Invoke-RestMethod. - LimpingNinja
@LimpingNinja, você tem uma fonte para isso? Talvez o problema que você teve foi devido a isso: "-UseBasicParsing Usa o objeto de resposta para conteúdo HTML sem a análise DOM (Document Object Model). Esse parâmetro é necessário quando o Internet Explorer não está instalado nos computadores, como em uma instalação Núcleo do Servidor de um sistema operacional Windows Server. " a partir de msdn.microsoft.com/powershell/reference/3.0/… - Michael Kelley


O excelente blogue Command Line Kung Fu uma postagem onde 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 a 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"

25



Esta resposta menciona o DownloadFile função que funciona bem também. - Paul Hicks


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 unaliased ...

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 Powershell e outros aliases, você pode encurtar os comandos para

PS> curl https://www.google.com 
ps> curl https://www.google.com | Select -ExpandProperty Content

... mas eu não recomendaria isso. Comandos verbosos ajudam os outros ao ler seu código.


23



Qual é o sinalizador -Uri fazendo ... Eu recebo os mesmos resultados com ou sem ele para 'curl -Uri api.github.com/rate_limit '. Eu procurei por isso, mas ainda não tenho certeza - Drenai
Em powershell, alguns nomes de parâmetros podem ser implicitamente derivados da ordem dos valores dos parâmetros. Você pode ver isso olhando para get-help curl. Você verá Invoke-WebRequest [-Uri] <Uri> ..., com os suportes [] indicando -Uri pode ser deixado de fora (e, portanto, invocado implicitamente). Como mencionei no post principal: em geral, você deve ser explícito (onde você ou outras pessoas irão ler seu código no futuro). - John Bentley
Ah, obrigada. Então, eu estou deixando de fora, mas ainda está sendo invocado, não sabia que é o que o [] fez - Drenai
Você é bem vindo. Você tem isso. As descrições de sintaxe dos comandos do powershell que você encontra em get-help é dado em alguma versão de en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form. Você fará bem em ler / desmarcar isso porque alguma versão do Extended Backus Naur Form provavelmente é usada para descrever a sintaxe de muitas linguagens que você encontrará. Você notará que em en.wikipedia.org/wiki/… colchetes [ ...] designar a sintaxe que é opcional. - John Bentley


Você pode instalar cURL com Chocolatey e ter curl disponível no PowerShell CLI ou cmd.


13



Então vá votar para este connect.microsoft.com/PowerShell/feedbackdetail/view/1089296/… - MotoWilliams


Você também pode instalar Git para Windowse, em seguida, coloque a pasta Git bin no seu caminho. A instalação do Git inclui, entre outras coisas, o 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.


13





a coisa mais próxima wget ou curl no windows é bits (Serviço de Transferência Inteligente em Segundo Plano), que tem alguns trechos prontos para o powershell.


1



Acho que o BITS resolve um problema diferente do que wget ou curl. - ongle
Buscando coisas de um servidor http? - akira
Não :), a parte de inteligência de fundo dele. - ongle


Este comando deve funcionar:

Invoke-WebRequest -UseBasicParsing -Uri http://example.com/

Faz parte de Microsoft.PowerShell.Utility desde o PowerShell 3.0.

Veja também: Obtenha $ webclient.downloadstring para gravar no arquivo de texto em Powershell.


0