WebRequest:无法绑定参数'标题'
我试图在powershell中执行一个curl命令:
curl --user bitcoinipvision --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "move", "params": ["acc-1", "acc-2", 6, 5, "happy b
irthday!"] }' -H 'content-type: application/json;' http://localhost:18332/
但是我得到这个错误,是什么问题?
Invoke-WebRequest:无法绑定参数'标题'。 无法转换“content-type:application / json;” 类型“System.String”的值键入“System.Collections.IDictionary”。 在行:1 char:158 + ... 5,“生日快乐!”]}'-H'content-type:application / json;' http:// ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidArgument:(:) [ Invoke-WebRequest],ParameterBindingException + FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
正如一些评论者已经指出的那样,你会发现curl
实际上只是Invoke-WebRequest
一个别名:
PS> Get-Command curl
CommandType Name Version Source
----------- ---- ------- ------
Alias curl -> Invoke-WebRequest
注意:我建议使用Get-Command
,而不是Get-Alias
因为您可能不知道您使用的命令是别名,cmdlet还是可执行文件。
从这一点,有两种可能的方法来解决你的问题:
使用PowerShell的Invoke-RestMethod
(或者,如果您使用PowerShell <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
进程返回的字符串。 这对二进制内容也可能有问题。