Проблемы API Powershell Rest для доставки параметров - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь перевести работающий CURL WebRequest в использование чистого powershell. К сожалению, я не знаю, что такое параметр в Powershell, который заменяет параметр CURL --data.

Аутентификация (и более простые почтовые запросы, которые я уже сделал с Powershell и REST), но для указанных c Запрос CURL Я не могу правильно получить перевод на Powershell.

Это рабочий запрос CURL:

curl -k https://RestAPI-URL -X GET -H "auth: Basic <Token>" -H "Content-Type: application/json" --data "{\"net_cidr\":\"10.0.0.0/8\"}"

И это перевод Powershell (с использованием PS-версии 5.1) :

$json = ConvertTo-Json (@{"username"="Test";"password"="Test";})
$token = (Invoke-WebRequest -Uri "https://RestAPI-URL"  -Body $json -ContentType "application/json" -Method POST).content | Out-String | ConvertFrom-Json

$token = $token.access_token
$header = @{auth="Basic $token"}


$Parameters = @{
  net_cidr = '10.0.0.0/8'
}

Invoke-RestMethod -Uri "https://RestAPI-URL" -Headers $header -body $Parameters -Method GET -ContentType "application/json"

Ошибка-выход из Web-запроса через Powershell:

FAILED: Укажите все параметры: net_id

1 Ответ

0 голосов
/ 19 февраля 2020

У меня была похожая проблема с другим API. Я использовал метод ниже для устранения неполадок. Запустите этот код и сообщите, что вы видите. Возможно, вам придется включить этот параметр net_id. В моем случае я пропустил обязательный параметр, которого не было в документации REST для приложения, с которым я работал.

Ниже я поместил ваш код в функцию REST-CALL, затем я включил функцию, чтобы помочь нам понять ошибку (Get-ErrorFromResponseBody). Мы пробуем командлет invoke-restmethod, и в случае ошибки он перехватывается и обрабатывается Get-ErrorFromResponseBody. Хотя это не совсем ваш ответ, это шаг к нему. Я обновлю это после того, как вы сообщите ответ.

function REST-CALL(){
    $json = ConvertTo-Json (@{"username"="Test";"password"="Test"})
    $token = (Invoke-WebRequest -Uri "https://RestAPI-URL"  -Body $json -ContentType "application/json" -Method POST).content | Out-String | ConvertFrom-Json

    $token = $token.access_token
    $header = @{auth="Basic $token"}

$Parameters = @{
  net_cidr = '10.0.0.0/8'
}

        try{
            $global:site = Invoke-RestMethod -Uri "https://RestAPI-URL" -Headers $header -body $Parameters -Method POST -ContentType "application/json"

        }
        catch{
            write-host "An exception occurred: The request did not complete."
            Get-ErrorFromResponseBody($_)
        }
}

Function Get-ErrorFromResponseBody($ErrorMessage) {
    #Determine if we are using PowerShell v5.1 and lower exception handling
    if ($PSVersionTable.PSVersion.Major -lt 6) {
        if ($Error.Exception.Response) {  
            $Reader = New-Object System.IO.StreamReader($ErrorMessage.Exception.Response.GetResponseStream())
            $Reader.BaseStream.Position = 0
            $Reader.DiscardBufferedData()
            $ResponseBody = $Reader.ReadToEnd()
            if ($ResponseBody.StartsWith('{')) {
                $ResponseBody = $ResponseBody | ConvertFrom-Json
            }
            return $ResponseBody
        }
    }
    else {
        return $ErrorMessage.ErrorDetails.Message
    }
}

REST-CALL

"Флаг --data должен использоваться для определения данных POST." Поэтому я чувствую, что вы должны попробовать метод POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...