我正在尝试在powershell中执行curl命令:
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/
但是我得到了这个错误,问题是什么?
Invoke-WebRequest : Cannot bind parameter 'Headers'. Cannot convert the "content-type: application/json;" value of type "System.String" to type "System.Collections.IDictionary". At line:1 char:158 + ... 5, "happy birthday!"] }' -H 'content-type: application/json;' http:// ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
答案 0 :(得分:5)
正如一些评论者所说,curl
实际上只是Invoke-WebRequest
的别名:
PS> Get-Command curl
CommandType Name Version Source
----------- ---- ------- ------
Alias curl -> Invoke-WebRequest
注意:我建议使用Get-Command
,而不是Get-Alias
,因为您可能不知道您使用的命令是别名,cmdlet还是可执行文件。< / em>的
从这一点开始,有两种方法可以解决您的问题:
使用PowerShell&#39; Invoke-RestMethod
(或者,如果您使用的是PowerShell&lt; 3,Invoke-WebRequest
):
Invoke-RestMethod -Uri http://localhost:18332/ -Credential bitcoinipvision -body $thisCanBeAPowerShellObject
如您所见,由于JSON是IRM的默认内容类型,因此不需要内容类型;虽然您可以使用-ContentType
更改它。
如果您在当前环境中可用,请使用原始cUrl
。你必须这样打字:
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/
我肯定更喜欢第一个第一个,因为PowerShell本身支持JSON答案,这使您可以轻松使用它们,例如通过将其汇总到Where-Object
,Format-Table
,Select-Object
,Measure-Object
等等。如果您更喜欢使用cUrl,则必须自行解析curl.exe
进程返回的String。这对二进制内容也可能有问题。
答案 1 :(得分:1)
我遇到了类似的问题,直到发现: https://github.com/MicrosoftDocs/azure-docs/issues/31851
“这些命令旨在在特定的VM内和Bash环境中运行。不是在PowerShell中运行。因此,在大多数情况下都会看到您看到的错误。”
答案 2 :(得分:0)
Curl基本上在PowerShell中使用Invoke-Webrequest。
您可以在错误中看到,标头基本上接受“ System.Collections.IDictionary” n的形式,并且您正在通过“ System.String”。
将页眉转换为字典/哈希表将解决此问题,
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/