我需要与需要JSON帖子数据的REST API进行交互.所以我开始使用这样的东西:
$ReqURI = 'http://httpbin.org/post'
Invoke-WebRequest -Method Post -Uri $ReqURI -Body @{
'api.token' = "api.token"
'action' = 'create item'
} -Verbose| fl *
Run Code Online (Sandbox Code Playgroud)
所以我用httpbin.org测试了它:
但是,如果您需要在正文部分中使用列表或数组,如下例所示:
$ReqURI = 'http://httpbin.org/post'
$Response = Invoke-RestMethod -Method Post -Uri $ReqURI -Body @{
'api.token' = "api.token"
'names' = @('rJENK', 'rFOOBAR')
} -Verbose| fl *
$Response
Run Code Online (Sandbox Code Playgroud)
...你得到的东西就像转换错误:
所以我想我可以将自己转换为JSON字符串并使用-Depth参数from ConvertTo-JSON.除此之外,我尝试了如果我先将哈希表转换为对象的样子.
但两次尝试都会返回相同甚至更糟的结果:
所以最后我切换到了Invoke-WebRequest.但这里的结果是一样的.
我的参考是使用JSON字符串的工作api调用:
"api.token" : "fooobar",
"names": [
"rJENK",
"rFOOBAR"
]
Run Code Online (Sandbox Code Playgroud)
我想出了一个解决方法.看起来我正在使用的api无法处理包含嵌套元素或PowerShell创建的数组的请求.
非工作示例:
$ReqURI = 'http://httpbin.org/post'
$Response = Invoke-RestMethod -Method Post -Uri $ReqURI -Body @{
'api.token' = "api.token"
'names' = @('rJENK', 'rFOOBAR')
} -Verbose| fl *
$Response
Run Code Online (Sandbox Code Playgroud)
相反,我不得不伪造一个带索引的数组.这是解决方法:
$ReqURI = 'http://httpbin.org/post'
$Response = Invoke-RestMethod -Method Post -Uri $ReqURI -Body @{
'api.token' = "api.token"
'names[0]' = 'rJENK'
'names[1]' = 'rFOOBAR'
} -Verbose| fl *
$Response
Run Code Online (Sandbox Code Playgroud)
所以现在你必须使用内容类型作为Application/Json像:
$ReqURI = 'http://httpbin.org/post'
$Jsonbody= @{
'api.token' = "api.token"
'names' = @('rJENK', 'rFOOBAR')
} | ConvertTo-Json
$Response = Invoke-RestMethod -Method Post -ContentType 'application/json' -Uri $ReqURI -Body $body -Verbose| fl *
Run Code Online (Sandbox Code Playgroud)
这应该可以完成您的工作。希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
12867 次 |
| 最近记录: |