Получение 400 ошибок неверных запросов с помощью Invoke-RestMethod для Microsoft Cognitive API

мы пытаемся протестировать и оценить API анализа текста из службы Microsoft Cognitive. Мы пытаемся заставить работать быстрый и грязный сценарий PowerShell, использующий Invoke-RestMethod. После некоторых настроек нам по-прежнему возвращают 400 ошибок. Мы не уверены в том, что не так, потому что JSON кажется исправленным, а введенный нами ключ API является правильным. Мы использовали то, что нашли в блоге другого человека об использовании дополнительных заголовков, и попробовали несколько вариантов, но все еще не играли в кости. Может ли кто-нибудь провести за нас проверку на вменяемость?

#html tag stripper function
function htmlStrip ($results)
    {
    #using .NET toString method to ensure PS doesn't interpret same var incorrectly
    $results = $results.toString()
    $results -replace '<[^>]*(>|$)'
    }


Try
{


    [string]$sourceUrl = Read-Host "Enter a URL such as https://foobar.com"
}
Catch
{
    Write-Host "URL requires http:// or https:// prefix e.g. https://cnn.com"
}


$webClient = New-Object Net.WebClient
[string]$results = $webClient.DownloadString($sourceUrl)


[string]$cleanResults = htmlStrip $results


$body = 
[ordered]@{"documents" = 
    @{ "language" = "en"; "id" = $sourceUrl; "text" = $cleanResults }
    }

#>

$body = [ordered]@{
    "documents" = 
    @(
        @{ "language" = "en"; "id" = $sourceUrl; "text" = $cleanResults }
    )
}

$jsonBody = $body | ConvertTo-Json

#Begin Text Analytics API Call with Invoke-RestMethod wrapper
#[string]$apiUrl = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases"
[string]$apiKey = "REDACTED"


$headers = @{ "Ocp-Apim-Subscription-Key" = $apiKey }

$analyticsResults = Invoke-RestMethod -Method Post -Uri $apiUrl -Headers $headers -Body $jsonBody -ContentType "application/json"  -ErrorAction Stop

Write-Host $analyticsResults

Write-Host $jsonBody

person SCIS Security    schedule 02.07.2016    source источник


Ответы (1)


Данные, которые вы вводите в свойство text вашего запроса, вероятно, недействительны.
Я попробовал ваш скрипт с URL-адресом исправления для README.md репозитория TypeScript на GitHub, и он работает.

Ваш сценарий (немного сокращен)

$sourceUrl = 'https://raw.githubusercontent.com/Microsoft/TypeScript/master/README.md'

$webClient = New-Object Net.WebClient
$results = $webClient.DownloadString($sourceUrl)

$body = [ordered]@{
    "documents" = 
    @(
        @{ "language" = "en"; "id" = $sourceUrl; "text" = $results }
    )
}

$jsonBody = $body | ConvertTo-Json

$apiUrl = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases"
$apiKey = "..."

$headers = @{ "Ocp-Apim-Subscription-Key" = $apiKey }

$analyticsResults = Invoke-RestMethod -Method Post -Uri $apiUrl -Headers $headers -Body $jsonBody -ContentType "application/json"  -ErrorAction Stop
$analyticsResults.documents.keyPhrases

Результат

TypeScript compiler
gulp tests
g typescript
TypeScript source
built compiler
TypeScript users
g gulp
TypeScript directory
cd TypeScript
gulp baseline
gulp lint
gulp local
gulp clean
gulp runtests-browser
gulp LKG
Install Gulp tools
...
person DAXaholic    schedule 02.07.2016
comment
Понятно, спасибо, что поделились! Возможно, Microsoft запрещает определенные типы печатных или непечатаемых символов. Возможно, символы типа инъекции анти-sql. Большое спасибо за подтверждение для нас! - person SCIS Security; 04.07.2016