我尝试用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(数组)中提取字符串?
任何帮助都非常感谢。
1条答案
按热度按时间guykilcj1#
所以最后我认为@jdweng和@Jeroen Mostert的答案都让我找到了正确的地方。
我现在使用
Invoke-RestMethod
来提取数据,正如前面指出的那样,这是提取JSON等的更好方法。所以现在开始提取数据。
然后通过将主体构建为以下形式来创建分页主体
这对于后续数据非常有效,因为
谢谢你的意见,非常感谢。