Invoke-RestMethod для публикации ошибки API - PullRequest
0 голосов
/ 27 мая 2018

Срывая с себя это, я пытаюсь использовать API kanboard (kanboard.org) из powershell, по сути, используя curl, который из исследования - это именно то, чем является Invoke-RestMethod.

Яполучить следующую ошибку:

Invoke-RestMethod : Cannot bind parameter 'Headers'. Cannot convert the ""X-API-Auth",
"agBzAG8AbgByAHAAYwA6ADQAMgBjAGQANwAwADEAMgA3ADgAMgAyAGMAYwBiAGUANwA1ADcAMAA3AGYANQBmAGUAZQA2ADkANgBmADYAYQA1AGIAOQAwADIANABiADEAZQBhADAANwBjAGIAOQA1ADQAYQA5AGQAYQA5AGMAYQAwAGYAYgA0AA=="" value of type
"System.String" to type "System.Collections.IDictionary".
At line:1 char:77
+ ... RestMethod -Uri $kanboardserver -Method Post -Headers $header -Body $ ...
+                                                           ~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-RestMethod], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

Мой код вызова API с использованием powershell следующий:

$kanboardserver = "http://mykanboardserver/jsonrpc.php"
$kanboardtoken = "jsonrpc:42cd70127822ccbe75707f5fee696f6a5b9024b1ea07cb954a9da9ca0fb4"
$converted = $kanboardtoken | ConvertTo-Base64

$headersKan = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" -ErrorAction Stop
$headersKan.Add("X-API-Auth", $converted)

$payload = @{ jsonrpc = "2.0"; 
            method = "getAllProjects"; 
            id = 1;
            } | ConvertTo-Json

$responseKan = Invoke-RestMethod -Uri $kanboardserver -Method Post -Headers $header -Body $payload -ErrorAction Stop
Write-Host $responseKan

Просто для справки приведен пример документации о том, как вызывать API с помощью CURL, которыйна чем я основывал свой код выше.(https://docs.kanboard.org/en/latest/api/examples.html)

curl \
-u "jsonrpc:19ffd9709d03ce50675c3a43d1c49c1ac207f4bc45f06c5b2701fbdf8929" \
-d '{"jsonrpc": "2.0", "method": "getAllProjects", "id": 1}' \
http://localhost/kanboard/jsonrpc.php

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Спасибо. Итак, я снова столкнулся с ошибкой, с которой я сталкивался ранее. Это проблема авторизации.

Invoke-RestMethod : {"jsonrpc":"2.0","error":{"code":401,"message":"Unauthorized"},"id":null}

Я знаю, что токен правильный, так как я создал макет клиента php иAPI работает.

Последний код, сообщающий мне об этой ошибке, приведен ниже, он должен соответствовать способу формирования заголовка, я не могу думать ни о чем другом.

 $kanboardserver = "http://mykanboardserver/jsonrpc.php"
    $kanboardtoken = "jsonrpc:57c9d99c1f5629959d237822a000a20b22913c71688e6520e5638beec11b" | ConvertTo-Base64

    $headers = @{
        'X-API-Auth' = $kanboardtoken
        }

    $payload = @{ jsonrpc = "2.0"; 
                method = "getAllProjects"; 
                id = 1;
                } | ConvertTo-Json


        $responseKan = Invoke-RestMethod -Uri $kanboardserver -Method Post -Headers $headers -Body $payload -ErrorAction Stop
        Write-Host $responseKan
0 голосов
/ 27 мая 2018

Обновлено

Вы должны использовать Hashtable для параметра заголовков IDictionary, например:

Что касается строки base64, я не знаю ConvertTo-Base64 вы используете, в любом случае, вот как я это делаю:

$kanboardtoken = "jsonrpc:57c9d99c1f5629959d237822a000a20b22913c71688e6520e5638beec11b"
$Base64 = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($kanboardtoken))


$headers = @{
'X-API-Auth' = $Base64
}

$payload = @{ jsonrpc = "2.0"; 
            method = "getAllProjects"; 
            id = 1;
            } | ConvertTo-Json

$responseKan = Invoke-RestMethod -Uri $kanboardserver -Method Post -Headers $headers -Body $payload -ErrorAction Stop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...