将Windows cURL语法转换为等效的InvokeRestMethod命令

时间:2019-06-12 18:40:50

标签: windows powershell curl

我无法将Windows中的有效cURL命令转换为等效的PowerShell InvokeRestMethod命令。看起来我很接近。我得到回应。但是,API似乎无法理解InvokeRestMethod命令发送的嵌套哈希表元素“ domain” 。 API似乎可以识别所有其他哈希元素。

cURL命令 (有效)

curl "https://api.rebrandly.com/v1/links" -X POST -H "apikey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -H "Content-Type: application/json" -d "{ \"destination\": \"http://longurl.com\", \"domain\": {\"fullName\": \"link.domain.com\"}}"

PowerShell:

$body = @{
 "destination"="longurl.com"
 "domain" = @("fullName", "link.domain.com")
} | ConvertTo-Json

$header = @{
 "apikey"="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 "Content-Type"="application/json"
}

Invoke-RestMethod -Uri "https://api.rebrandly.com/v1/links" -Method 'Post' -Body $body -Headers $header

PS:我也尝试使用以下语法。不幸的是,我得到了相同的结果..其中“域”哈希元素被忽略了。

$body = @{
 "destination"="longurl.com"
 "domain[0]" = "fullName"
 "domain[1]" = "link.domain.com"
} | ConvertTo-Json

1 个答案:

答案 0 :(得分:2)

在使用@(...)括号时,它将被解释为数组而不是键值哈希表,该表将在JSON中转换为[...]数组。只需用@{...}大括号替换嵌套语句中的括号即可表示哈希表:

$body = @{
 "destination"="longurl.com"
 "domain" = @{"fullName" = "link.domain.com"}
} | ConvertTo-Json

哪个匹配JSON:

{
    "destination":  "longurl.com",
    "domain":  {
                   "fullName":  "link.domain.com"
               }
}