2011-10-10 11:19:21 +0000 2011-10-10 11:19:21 +0000
155
155

PowerShell equivalente a curl

¿Hay un equivalente a curl en PowerShell? ¿Tiene alguna capacidad incorporada similar o hay un cmdlet de terceros?

Respuestas (8)

104
104
104
2013-05-04 00:18:17 +0000
46
46
46
2015-10-30 23:21:20 +0000

A partir de Powershell 5.0, si no antes, curl es un alias de 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 unaliased …

PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com

Así que devuelve varias propiedades de la solicitud como sigue …

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 sólo 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

Apalancamiento de los valores por defecto de Powershell y otros alias que podría acortar los comandos a

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

… pero yo no lo recomendaría. Los comandos de Verbose ayudan a otros cuando leen su código.

Actualización:

Powershell 6.x

Se desaconseja el uso de alias

A partir de Powershell 6.x “Core” curl ya no es un alias para Invoke-WebRequest (el alias wget también se elimina) . En su lugar, use 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 de Invoke-WebRequest (probado en Powershell 6.2.3), a pesar del 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 fueron removidos del núcleo de PowerShell por lo que el problema [de tener esos alias] se limitó a Windows PowerShell”

En la conclusión el equipo de Powershell también alienta a los usuarios “a no confiar en los alias en los scripts”.

Como @v6ak ha señalado en los comentarios, el uso de curl y wget en PowerShell (5.0 o inferior) puede ser un problema en: invocar involuntariamente el rizo real o wget si se instalan uno al lado del otro; y, en cualquier caso, causa confusión.

Nueva codificación

Se recomienda actualizar el “núcleo” de Powershell (6.x o superior) para aprovechar la codificación por defecto utf8NoBOM, al usar Invoke-WebRequest (y muchos otros comandos de salida de texto). Si se hiciera esto explícitamente se 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 hará la codificación con utf8NoBOM (se 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 con utf8NoBOM tienden a causar menos problemas cuando se viaja a través de varios ecosistemas. Por supuesto, si necesitas alguna otra codificación puedes establecer alguna alternativa explícitamente.

En Powershell 5.0 y inferior la codificación de utf8NoBOM no estaba disponible, y mucho menos la predeterminada.

Detalles:

29
29
29
2011-10-10 11:26:27 +0000

El excelente blog de Kung Fu de Línea de Comando tiene un post donde comparan curl, wget y los comandos relacionados de PowerShell

En resumen:

(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"
15
15
15
2013-04-04 01:20:37 +0000

También puedes instalar Git para Windows , y luego poner la carpeta bin de Git en tu ruta. La instalación de Git incluye, entre otras cosas, curl.exe. Después de la instalación, simplemente pon %programfiles(x86)%\git\bin en tu PATH. A continuación, podrás usar el comando curl desde el Símbolo del sistema de comandos de Windows o desde la consola de PowerShell.

14
14
14
2013-01-22 15:07:59 +0000

Puedes instalar curl con Chocolatey y tener el curl disponible en PowerShell CLI o cmd.

1
1
1
2019-06-04 03:10:31 +0000

Curl

cmd, bash

curl -H "Host: whoami.local" 192.168.4.4

powershell

Invoke-WebRequest -H @{"Host"="whoami.local"} -UseBasicParsing 192.168.4.4

# or 
# $(Get-Command curl) return "curl -> Invoke-WebRequest"
curl -H @{"Host"="whoami.local"} -UseBasicParsing 192.168.4.4
1
1
1
2011-12-11 16:38:28 +0000

lo más cercano a wget o curl en windows es bits (Background Intelligent Transfer Service), que tiene algunos fragmentos listos para el powerhell.

0
0
0
2018-02-13 12:01:17 +0000

Este comando debería funcionar:

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

Es parte de Microsoft.PowerShell.Utility desde PowerShell 3.0.

Ver también: Obtener $webclient.downloadstring para escribir en un archivo de texto en Powershell .