Existe-t-il un équivalent de curl
dans PowerShell? At-il une capacité intégrée similaire ou existe-t-il une applet de commande tierce?
Existe-t-il un équivalent de curl
dans PowerShell? At-il une capacité intégrée similaire ou existe-t-il une applet de commande tierce?
Réponses:
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/
curl
ou wget
dans Powershell maintenant.
À partir de Powershell 5.0, sinon avant, curl
est un alias pour 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
Renvoyez donc 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 juste le contenu ...
PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content
<!doctype html><html itemscope="" itemtype="http://schem[etc ...]
Les commandes équivalentes aliasées sont ...
PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content
En utilisant les valeurs par défaut de Powershell et d’autres alias, vous pouvez raccourcir les commandes pour
PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content
... mais je ne le recommanderais 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 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é le rejet apparent d'une requête dans un RFC "visant à supprimer les alias curl et wget de Windows PowerShell" .
La RFC note que "les alias wget / curl ont déjà été supprimés de PowerShell Core, de sorte que le problème [d'avoir ces alias] était limité à Windows PowerShell".
En conclusion, l'équipe de Powershell encourage également les utilisateurs "à ne pas s'appuyer sur des alias dans les scripts".
Comme @ v6ak l'a noté dans les commentaires, utiliser curl
et wget
dans PowerShell (5.0 ou une version inférieure) peut poser un problème: en invoquant involontairement le véritable curl ou wget s'il est installé côte à côte; et, dans tous les cas, crée de la confusion.
Il est recommandé de mettre à jour Powershell "core" (version 6.x ou supérieure) afin de tirer parti du codage par défaut utf8NoBOM
lors de l’utilisation Invoke-WebRequest
(et de nombreuses autres commandes de sortie de texte). Si quelqu'un le faisait explicitement, vous pourriez 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 si vous utilisez une commande plus courte, implicite ...
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 effectué (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 vos déplacements dans divers é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’ utf8NoBOM
encodage n’était pas disponible, encore moins par défaut.
Détails:
get-help curl
. Vous verrez Invoke-WebRequest [-Uri] <Uri> ...
, avec les crochets []
indiquant -Uri
peut être omis (et donc implicitement invoqué). Comme je l'ai mentionné dans l'article principal: en général, vous devez être explicite (à savoir si vous ou d'autres allez lire votre code à l'avenir).
[]
qui se
get-help
est donnée dans certaines versions de en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form . Vous ferez bien de lire / survoler cela car une version de Extended Backus Naur Form est probablement utilisée pour décrire la syntaxe de nombreuses langues que vous rencontrerez. Vous remarquerez qu’en fr.wikipedia.org/wiki/…, les crochets [ ...]
désignent une syntaxe facultative.
L'excellent blog Command Line Kung Fu contient un article dans lequel ils comparent curl, wget et les commandes PowerShell associées.
En un mot:
(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"
DownloadFile
fonction qui fonctionne bien aussi.
Vous pouvez également installer Git pour Windows , puis placer le dossier Git bin dans votre chemin. L'installation de Git inclut, entre autres, curl.exe. Après l’installation, il suffit de mettre %programfiles(x86)%\git\bin
dans votre PATH. Vous pourrez ensuite utiliser la commande curl à partir de l'invite de commande Windows ou de la console PowerShell.
Vous pouvez installer cURL avec Chocolatey et disposer de curl dans PowerShell CLI ou cmd
.
la chose la plus proche de wget
ou curl
sur Windows est le bit (service de transfert intelligent en arrière-plan), qui contient des extraits prêts à être utilisés dans PowerShell.
Cette commande devrait fonctionner:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
Cela fait partie de Microsoft.PowerShell.Utility depuis PowerShell 3.0.
Voir aussi: Obtenez $ webclient.downloadstring pour écrire dans un fichier texte dans Powershell .