J'essaie d'exécuter une commande curl dans powershell:
curl --user bitcoinipvision --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "move", "params": ["acc-1", "acc-2", 6, 5, "happy birthday!"] }' -H 'content-type: application/json;' http://localhost:18332/
Mais je reçois cette erreur, quel est le problème?
Invoke-WebRequest: impossible de lier le paramètre 'Headers'. Impossible de convertir le "Content-type: application/json;" valeur de type "System.String" à la valeur .__ 'content-type: application/json;' http: // ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~. + CategoryInfo: InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException + FullyQualifiedErrorId: CannotConvertArgumentNoMessage, Microsoft.PowerShell.Commands.InvokeWebRequestCommand.
Comme cela a déjà été mentionné par certains commentateurs, vous verrez que curl
est en fait juste un alias de Invoke-WebRequest
:
PS> Get-Command curl
CommandType Name Version Source
----------- ---- ------- ------
Alias curl -> Invoke-WebRequest
Remarque: je suggère d'utiliser Get-Command
, et non Get-Alias
, car vous ne savez peut-être pas si la commande que vous utilisez est un alias, une applet de commande ou un exécutable.
A partir de là, il y a deux manières possibles de résoudre votre problème:
Utilisez Invoke-RestMethod
de PowerShell (ou, si vous utilisez PowerShell <3, Invoke-WebRequest
):
Invoke-RestMethod -Uri http://localhost:18332/ -Credential bitcoinipvision -body $thisCanBeAPowerShellObject
Comme vous pouvez le constater, aucun type de contenu n'est nécessaire, car JSON est le type de contenu par défaut d'IRM. bien que vous puissiez le changer en utilisant -ContentType
.
Si disponible dans votre environnement actuel, utilisez le cUrl
d'origine. Vous devez le taper de cette façon:
curl.exe --user bitcoinipvision --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "move", "params": ["acc-1", "acc-2", 6, 5, "happy birthday!"] }' -H 'content-type: application/json;' http://localhost:18332/
Je préférerais définitivement le premier au deuxième, car PowerShell supporte nativement les réponses JSON, ce qui vous permet de les utiliser facilement, par exemple en le canalisant vers Where-Object
, Format-Table
, Select-Object
, Measure-Object
et tant de choses. Si vous préférez utiliser cUrl, vous devez analyser vous-même la chaîne renvoyée par le processus curl.exe
. Cela pourrait également être problématique avec le contenu binaire.