Ошибка Invoke-RESTMethod «request_data должен иметь тип: dict»

#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. Он устранил эту ошибку и доставил другую … по-видимому, фильтры должны быть типа «список» … Я пометил ваш ответ как ответ, потому что он решил исходный запрос.