¿Hay un equivalente de curlen PowerShell? ¿Tiene alguna capacidad incorporada similar o hay un cmdlet de terceros?
¿Hay un equivalente de curlen 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/
curlo wgeten Powershell ahora.
A partir de Powershell 5.0, si no antes, curles 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 wgettambién se elimina). En lugar de usar Invoke-WebRequestdirectamente.
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 curly wgeten 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 utf8NoBOMcuando 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 utf8NoBOMtienden 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 utf8NoBOMversiones 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 -Uripuede 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-helpse 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"
DownloadFilefunció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\bintu 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 wgeto curlen 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 .