使用 Invoke-RestMethod for Microsoft Cognitive API 得到 400 个错误请求错误
Getting 400 Bad Request Errors using Invoke-RestMethod for Microsoft Cognitive API
我们正在尝试测试和评估来自 Microsoft 认知服务的文本分析 API。我们正试图让使用 Invoke-RestMethod 的快速而肮脏的 PowerShell 脚本工作。经过一些调整后,我们仍然收到返回给我们的 400 错误。我们不确定哪里出了问题,因为 JSON 似乎已更正并且我们输入的 API 密钥似乎是正确的。我们已经利用了我们在另一个人的博客上找到的关于使用附加 headers 的内容,并尝试了一些变体,但仍然没有成功。有人可以为我们做健全性检查吗?
#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
您在请求的 text
属性 中输入的数据可能无效。
我在 GitHub 上对 TypeScript 存储库的 README.md 进行了修复 URL 并尝试了您的脚本,它可以正常工作。
您的脚本(稍微缩短)
$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
...
我们正在尝试测试和评估来自 Microsoft 认知服务的文本分析 API。我们正试图让使用 Invoke-RestMethod 的快速而肮脏的 PowerShell 脚本工作。经过一些调整后,我们仍然收到返回给我们的 400 错误。我们不确定哪里出了问题,因为 JSON 似乎已更正并且我们输入的 API 密钥似乎是正确的。我们已经利用了我们在另一个人的博客上找到的关于使用附加 headers 的内容,并尝试了一些变体,但仍然没有成功。有人可以为我们做健全性检查吗?
#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
您在请求的 text
属性 中输入的数据可能无效。
我在 GitHub 上对 TypeScript 存储库的 README.md 进行了修复 URL 并尝试了您的脚本,它可以正常工作。
您的脚本(稍微缩短)
$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
...