#powershell #rest
#powershell #rest
Вопрос:
Я только начинаю с REST API, и единственный доступный мне язык — PowerShell
Я вызываю список «вещей» — это работает, и я получаю свойство ID
Затем я пытаюсь выполнить итерацию по этому списку и получить более подробную запись для «вещи» (второй Invoke-RestMethod) — при попытке этого я получаю сообщение об ошибке:
Invoke-RestMethod : {«reply»: {«err_code»: 500, «err_msg»: «Получен неверный ввод при обработке общедоступного API XDR», «err_extra»: «request_data должен иметь тип: dict»}}
Я думал, что convertto-json преобразует «запрос» хэш-таблицы в словарь.
Я новичок в этом деле, поэтому, пожалуйста, не думайте, что я что-то знаю.
$ContentType = "application/json"
$URL_All = 'https://api-<company>.xdr.eu.paloaltonetworks.com/public_api/v1/endpoints/get_endpoints/'
$URLEndpoint = 'https://api-<company>.xdr.eu.paloaltonetworks.com/public_api/v1/endpoints/get_endpoint/'
$endpoints = Invoke-RestMethod -uri $URL_All -method POST -Headers @{"x-xdr-auth-id" = "1"; "Authorization" = "<API-KEY_Goes_Here>" } -ContentType "application/json" -Verbose
if ($endpoints.reply.count -gt 0){
write-host "Found $($endpoints.reply.count) details"
}
else {
write-host " API didn't return any endpoint - ending script "
break
}
foreach ($endpoint in $endpoints.reply) {
if($endpoint.agent_id -ne $null){
$request = @{
request_data = '{}'
filters = @{
field = "endpoint_id_list"
operator = "in"
Value = "$($endpoint.agent_ID)"
Search_from = 0
Search_to = 1
sort = @{
field = "last_seen"
keyword = "desc"
}
}
} | ConvertTo-Json
$Endpoint_full = Invoke-RestMethod -uri $URLEndpoint -method POST -Body $request -Headers @{"x-xdr-auth-id" = "1"; "Authorization" = "<API-KEY_Goes_Here>" } -ContentType "application/json" -Verbose
}
}
Комментарии:
1. @iRon Всегда стоит посмотреть, в этом случае он преобразуется в Json и обратно без проблем, используя глубину по умолчанию 2.
Ответ №1:
Проблема не в вашем преобразовании JSON, подсказка содержится в сообщении об ошибке.
"request_data must be of type: dict"
Ключ request_data
, который просто состоит из этого в вашем запросе:
request_data = '{}'
Ie. он в основном пустой, в то время как API ожидает хэш-таблицу или аналогичную структуру.
Комментарии:
1. Спасибо за это, я действительно поместил содержимое request_data не в то место. Строка ниже, которая создает хэш-таблицу с именем «Фильтры», должна была находиться внутри таблицы request_data. Он устранил эту ошибку и доставил другую … по-видимому, фильтры должны быть типа «список» … Я пометил ваш ответ как ответ, потому что он решил исходный запрос.