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 ?
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 ?
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/
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 :
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.
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 :
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"
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.
Vous pouvez installer cURL avec Chocolatey et avoir le curl disponible dans PowerShell CLI ou cmd
.
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 .