¿Hay un equivalente de curl
en PowerShell? ¿Tiene alguna capacidad incorporada similar o hay un cmdlet de terceros?
¿Hay un equivalente de curl
en PowerShell? ¿Tiene alguna capacidad incorporada similar o hay un cmdlet de terceros?
Respuestas:
PowerShell 3.0 tiene el nuevo comando Invoke-RestMethod
:
http://technet.microsoft.com/en-us/library/hh849971.aspx
mas detalle:
https://discoposse.com/2012/06/30/powershell-invoke-restmethod-putting-the-curl-in-your-shell/
curl
o wget
en Powershell ahora.
A partir de Powershell 5.0, si no antes, curl
es un 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 el comando sin alias ...
PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com
Por lo tanto, devuelva varias propiedades de la solicitud de la siguiente manera ...
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
... o solo el contenido ...
PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content
<!doctype html><html itemscope="" itemtype="http://schem[etc ...]
Los comandos con alias equivalentes son ...
PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content
Aprovechando los valores predeterminados de Powershell y otros alias, puede acortar los comandos a
PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content
... pero no lo recomendaría. Los comandos detallados ayudan a otros cuando leen su código.
Actualizar:
A partir de Powershell 6.x "Core" curl
ya no es un alias para Invoke-WebRequest
(el alias wget
también se elimina). En lugar de usar Invoke-WebRequest
directamente.
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias iwr -> Invoke-WebRequest
Curl ya no es un alias para Invoke-WebRequest (probado en Powershell 6.2.3), a pesar de un aparente rechazo de un movimiento en un RFC "para eliminar los alias curl y wget de Windows PowerShell" .
Ese RFC señala que "los alias wget / curl ya se eliminaron de PowerShell Core, por lo que el problema [de tener esos alias] se limitó a Windows PowerShell".
En conclusión, el equipo de Powershell también alienta a los usuarios a "no confiar en los alias en los scripts".
Como ha notado @ v6ak en los comentarios, usar curl
y wget
en PowerShell (5.0 o inferior) puede ser un problema en: invocar involuntariamente el curl o wget real si se instala uno al lado del otro; y, en cualquier caso, causa confusión.
Se recomienda actualizar Powershell "core" (6.xo superior) para aprovechar la codificación predeterminada utf8NoBOM
cuando se utiliza Invoke-WebRequest
(y muchos otros comandos de salida de texto). Si uno estuviera haciendo esto explícitamente, podría hacer 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
Sin embargo, incluso cuando se usa un comando más corto e implícito ...
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js
... se realizará la codificación con utf8NoBOM
(puede verificar esto, por ejemplo, abriendo el archivo guardado en Visual Studio Code y observando "UTF-8" en la barra de estado).
Los archivos guardados utf8NoBOM
tienden a causar menos problemas al viajar a través de varios ecosistemas. Por supuesto, si necesita otra codificación, puede establecer alguna alternativa explícitamente.
En Powershell 5.0 y utf8NoBOM
versiones anteriores, la codificación no estaba disponible, y mucho menos la predeterminada.
Detalles:
get-help curl
. Verá Invoke-WebRequest [-Uri] <Uri> ...
, con los corchetes []
indicando que -Uri
puede omitirse (y por lo tanto invocarse implícitamente). Como mencioné en la publicación principal: en general, debe ser explícito (dónde usted u otros leerán su código en el futuro).
[]
hizo
get-help
se dan en alguna versión de en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form . Hará bien en leer / leer eso porque alguna versión de Extended Backus Naur Form probablemente se use para describir la sintaxis de muchos idiomas con los que se encontrará. Notarás que en en.wikipedia.org/wiki/… los corchetes [ ...]
designan la sintaxis que es opcional.
El excelente blog Command Line Kung Fu tiene una publicación donde comparan curl, wget y los comandos relacionados de PowerShell
En una palabra:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")
O, si su versión de Powershell / .Net no acepta 2 parámetros para DownloadString
:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"
DownloadFile
función que también funciona bien.
También puede instalar Git para Windows y luego poner la carpeta bin Git en su ruta. La instalación de Git incluye, entre otras cosas, curl.exe. Después de la instalación, solo pon %programfiles(x86)%\git\bin
tu RUTA. Luego podrá usar el comando curl desde el símbolo del sistema de Windows o la consola de PowerShell.
Puede instalar cURL con Chocolatey y tener curl disponible en PowerShell CLI o cmd
.
Lo más parecido a wget
o curl
en Windows son los bits (Servicio de transferencia inteligente en segundo plano), que tiene algunos fragmentos listos para powershell.
Este comando debería funcionar:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
Es parte de Microsoft.PowerShell.Utility desde PowerShell 3.0.
Consulte también: Obtenga $ webclient.downloadstring para escribir en un archivo de texto en Powershell .