gpt4 book ai didi

powershell - 如何使用包含数组或列表的 JSON Body 执行 webrequest?

转载 作者:行者123 更新时间:2023-12-04 12:17:45 24 4
gpt4 key购买 nike

情况

我需要与需要 JSON 发布数据的 REST API 进行交互。
所以我开始使用这样的东西:

简单的工作示例

$ReqURI = 'http://httpbin.org/post'
Invoke-WebRequest -Method Post -Uri $ReqURI -Body @{
'api.token' = "api.token"
'action' = 'create item'
} -Verbose| fl *

所以我用 httpbin.org 测试了它:

Working

问题

但是如果你需要像这个例子一样在 body 部分使用一个列表或数组:
$ReqURI = 'http://httpbin.org/post'
$Response = Invoke-RestMethod -Method Post -Uri $ReqURI -Body @{
'api.token' = "api.token"
'names' = @('rJENK', 'rFOOBAR')
} -Verbose| fl *
$Response

...您会收到类似转换错误的信息:

Converting Issue

所以我想我可以自己将 body 转换成 JSON 字符串并使用 -Depth来自 ConvertTo-JSON 的参数.除此之外,如果我首先将哈希表转换为对象,我尝试了它的外观。

但两次尝试都返回相同甚至更糟的结果:

not working

所以最后我切换到 Invoke-WebRequest .但这里的结果是一样的。

我的引用是一个带有 JSON 字符串的有效 api 调用:
"api.token" : "fooobar",
"names": [
"rJENK",
"rFOOBAR"
]

个人解决方案

我想出了一个解决方法。我正在使用的 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

相反,我不得不伪造一个带有索引的数组。这是解决方法:
$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

最佳答案

所以现在你必须使用内容类型作为 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 *

这应该可以完成您的工作。希望能帮助到你。

关于powershell - 如何使用包含数组或列表的 JSON Body 执行 webrequest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41829733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com