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

PowerShell équivalent de curl

Y a-t-il un équivalent de curl dans PowerShell ? A-t-il une capacité intégrée similaire ou existe-t-il un cmdlet tiers ?

Réponses (8)

104
104
104
2013-05-04 00:18:17 +0000

PowerShell 3.0 a la nouvelle commande Invoke-RestMethod : http://technet.microsoft.com/en-us/library/hh849971.aspx

plus de détails : https://discoposse.com/2012/06/30/powershell-invoke-restmethod-putting-the-curl-in-your-shell/

46
46
46
2015-10-30 23:21:20 +0000

A partir de Powershell 5.0, si ce n'est pas avant, curl est 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

Pour utiliser la commande sans alias …

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

… Donc, retourner plusieurs propriétés de la requête comme suit …

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 simplement le contenu …

PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content

<!doctype html><html itemscope="" itemtype="http://schem[etc ...]

Les commandes alias équivalentes sont …

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

En utilisant les défauts de Powershell et d'autres alias, vous pouvez raccourcir les commandes à

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

… mais je ne le recommande pas. Les commandes verbeuses aident les autres lors de la lecture de votre code.

Mise à jour :

Powershell 6.x

Utilisation des alias déconseillée

A partir de Powershell 6.x “Core” curl n'est plus un alias pour Invoke-WebRequest (l'alias wget est également supprimé) . Utilisez plutôt Invoke-WebRequest directement.

PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize

CommandType Name Version Source
----------- ---- ------- ------
Alias iwr -> Invoke-WebRequest

Curl n'est plus un alias pour Invoke-WebRequest (testé sur Powershell 6.2.3), malgré un rejet apparent d'une motion dans un RFC “pour supprimer les alias curl et wget de Windows PowerShell” .

Cette RFC note que “les alias wget/curl ont déjà été supprimés de PowerShell Core, donc le problème [d'avoir ces alias] était limité à Windows PowerShell”

Dans la conclusion, l'équipe Powershell encourage également les utilisateurs “à ne pas se fier aux alias dans les scripts”.

Comme @v6ak l'a noté dans les commentaires, l'utilisation de curl et wget dans PowerShell (5.0 ou inférieur) peut être un problème dans les cas suivants : l'invocation involontaire du vrai curl ou wget s'ils sont installés côte à côte ; et, dans tous les cas, cause de la confusion.

Nouveau codage

Il est recommandé de mettre à jour le “noyau” de PowerShell (6.x ou supérieur) afin de profiter du codage par défaut utf8NoBOM, lorsque vous utilisez Invoke-WebRequest (et de nombreuses autres commandes de sortie de texte). Si l'on faisait cela explicitement, on pourrait faire quelque chose comme :

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

Cependant, même en utilisant une commande implicite plus courte …

Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js

… l'encodage avec utf8NoBOM sera fait (vous pouvez le vérifier, par exemple, en ouvrant le fichier enregistré dans Visual Studio Code et en observant “UTF-8” dans la barre d'état).

Les fichiers enregistrés avec utf8NoBOM ont tendance à causer moins de problèmes lors de voyages à travers différents écosystèmes. Bien sûr, si vous avez besoin d'un autre encodage, vous pouvez définir explicitement une alternative.

Dans Powershell 5.0 et inférieur, l'encodage utf8NoBOM n'était pas disponible, sans parler de la valeur par défaut.

Détails :

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

L'excellent blog Command Line Kung Fu a un post où ils comparent curl, wget et les commandes PowerShell associées

En bref :

(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")

Ou, si votre version de Powershell/.Net n'accepte pas 2 paramètres pour 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

Vous pouvez également installer Git for Windows , puis placer le dossier Git bin dans votre chemin. L'installation de Git comprend, entre autres, curl.exe. Après l'installation, il suffit de mettre %programfiles(x86)%\git\bin dans votre PATH. Vous pourrez alors utiliser la commande curl à partir de l'invite de commande de Windows ou de la console PowerShell.

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

Vous pouvez installer cURL avec Chocolatey et avoir le curl disponible dans PowerShell CLI ou 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

la chose la plus proche de wget ou curl sur windows est bits (Background Intelligent Transfer Service), qui a quelques bribes prêtes pour powerhell.

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

Cette commande devrait fonctionner :

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

Elle fait partie de Microsoft.PowerShell.Utility depuis PowerShell 3.0.

Voir aussi : Obtenez $webclient.downloadstring pour écrire dans un fichier texte dans Powershell .