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-ObjectFormat-TableSelect-ObjectMeasure-Object等穆赫。 如果您更喜欢使用cUrl,则必须自行解析由curl.exe进程返回的字符串。 这对二进制内容也可能有问题。

    链接地址: http://www.djcxy.com/p/37883.html

    上一篇: WebRequest : Cannot bind parameter 'Headers'

    下一篇: Parameters to a function of a module in Powershell