Powershell - API调用-分页- Base64

t1qtbnec  于 2023-02-16  发布在  Shell
关注(0)|答案(1)|浏览(211)

我尝试用PowerShell查询一个API,调用使用Invoke-WebRequest并将结果以JSON格式传递到PS中的数组($response)中。
查询只返回一定数量的结果,因此我需要将原始结果中返回的base64分页字符串传递回后续调用。
字符串以如下格式出现在JSON响应中:
"分页":{"下一页":" H4sIAAAAAAAAAG2O2wqDMBBE/2Uei5bYVrz8ioiscUMDVm2SQkXy712FQh/6OsyZORuMHQM71BtoGlA3GxY3L + zCihrPF7v1HNaFPRLsMYVZyuC39cEjJhumOez0DzVYT/3IQ0fhPxXbmMDPLhx/Vm5BXiO2kjI5fe/IHFIHGDFR1MqkdOE8vXFPaVykypd6aqgorgOJYQb7cPKXKaUSr4uVqxl4iQS8tHGD4B6x6ntAAAA ","限制":1000,"总数":9000}
如果我手动地将base64字符串复制并粘贴到一行代码中,那么每次都能成功;但是,如果我尝试通过使用从数组中提取字符串来以编程方式获取该字符串;

$response = Invoke-WebRequest -Uri 'https://cloud.apiiuse.com/api/v3/assets/' -Method POST -Headers $headers -ContentType 'application/json' -Body '{"limit":1000,"next":"($Response.Content|ConvertFrom-Json).Pagination.Next"}' -UseBasicParsing

我得到

Invoke-WebRequest : {"error":"Illegal base64 character 28"}

即使我尝试将字符串输出为

$response = Invoke-WebRequest -Uri 'https://cloud.apiiuse.com/api/v3/assets/' -Method POST -Headers $headers -ContentType 'application/json' -Body '{"limit":1000,"next":"(($Response.Content|ConvertFrom-Json).Pagination.Next).ToString()"}' -UseBasicParsing

我得到了同样的结果,这似乎表明当字符串从数组返回时,字符串中有一些非法字符,我现在很挠头,因为我想不出如何以正确的格式从PS中的JSON(数组)中提取字符串?
任何帮助都非常感谢。

guykilcj

guykilcj1#

所以最后我认为@jdweng和@Jeroen Mostert的答案都让我找到了正确的地方。
我现在使用Invoke-RestMethod来提取数据,正如前面指出的那样,这是提取JSON等的更好方法。
所以现在开始提取数据。

$response = Invoke-RestMethod -Uri 'https://cloud.myapi.com/api/v3/assets/search' -Method POST -Headers $headers -ContentType 'application/json' -Body '{"limit":1000}'

然后通过将主体构建为以下形式来创建分页主体

$Body = @"
{
    "limit`":1000,
    "next":"$($Response.Pagination.Next)"
}
"@

这对于后续数据非常有效,因为

Invoke-RestMethod -Uri 'https://cloud.myapi.com/api/v3/assets/search' -Method POST -Headers $headers -ContentType 'application/json' -Body $Body

谢谢你的意见,非常感谢。

相关问题