Azure Запрос на чтение когнитивных служб с помощью Powershell - PullRequest
1 голос
/ 19 июня 2020

Я пытаюсь использовать Azure API Cognitive Services с Powershell для «чтения» содержимого .jpg в хранилище больших двоичных объектов. Все, что я пытаюсь сделать, отлично работает с демонстрационной / тестовой страницей Azure API, поэтому я почти уверен, что это в какой-то мере доказывает, что некоторые элементы, которые я использую в своем коде, действительны. Ну, по крайней мере, они есть при использовании инструмента тестирования API.

Вот мой Powershell:

Clear-Host

$myUri      = "<ENDPOINT value from "keys and endpoint blade">/vision/v3.0/read/analyze?language=en"
$imagePath  = "<path to image in blob. accessible online and anonymously>"
$subKey     = "<KEY #1 from "keys and endpoint" blade>"

$headersHash = @{}
$headersHash.Add( "Host", "westeurope.api.cognitive.microsoft.com" )
$headersHash.Add( "Ocp-Apim-Subscription-Key", $subKey )
$headersHash.Add( "Content-Type","application/json" )

$bodyHash = @{ "url" = $imagePath }

out-host -InputObject "Sending request:"
$response = Invoke-WebRequest -uri $myUri `
    -Method Post `
    -Headers $headersHash `
    -Body $bodyHash `
    -verbose

"Response: $response"

Когда я его отправляю, все, что я когда-либо получаю, это:

Invoke-WebRequest : The remote server returned an error: (400) Bad Request.
At C:\scratch\testy.ps1:15 char:13
+ $response = Invoke-WebRequest -uri $myUri `
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-W 
    ebRequest], WebException
    + FullyQualifiedErrorId : 
    WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

Мне, должно быть, не хватает чего-то basi c, но я не вижу что. Нет опубликованных примеров использования Powershell для доступа к API CS, которые я могу найти, но есть пример с Python (запросы), и я почти уверен, что эмулирую и правильно представляю то, что входит в пример Python. . Но опять же, он не работает, поэтому что-то не так.

Как ни странно, когда я пытаюсь воссоздать это в Postman, я получаю 202, но не тело ответа, поэтому я не могу его просмотреть или извлечь apim-request-id, чтобы произвести следующий запрос для получения результатов.

1 Ответ

0 голосов
/ 20 июня 2020

Нашел проблему. Проблема прояснилась, когда я заключил вызов в блок try / catch и поместил это в блок catch:

$streamReader = 
[System.IO.StreamReader]::new($_.Exception.Response.GetResponseStream())
    $ErrResp = $streamReader.ReadToEnd() | ConvertFrom-Json
$streamReader.Close()

Затем я смог посмотреть содержимое переменной $ ErrResp, и там было фрагмент строки, в которой говорится «невозможно загрузить целевое изображение ..» или что-то в этом роде. Странно, потому что я мог использовать предоставленный мной URL-адрес, чтобы мгновенно подключиться и получить изображение ... так что это должен был быть способ, которым URL-адрес вставлялся в тело.

Это было.

При использовании хэш-таблицы в качестве тела, где вашим Content-Type является 'application / json', все, что вам нужно сделать, это использовать convertto- json с вашим ха sh первым. Это сработало, и я мгновенно получил свой 202 и указатель, где собирать мои результаты.

Надеюсь, это поможет кому-нибудь где-нибудь когда-нибудь.

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