Вызов API Rest работает с curl, но не работает с PowerShell - PullRequest
1 голос
/ 27 января 2020

У меня есть следующий curl запрос, который работает

curl.exe -X GET "https://host.crm.dynamics.com/api/data/v9.1/accounts?$select=name" -H "Authorization: Bearer xxxxx"

И я хочу реализовать его в PowerShell

Invoke-RestMethod "https://host.crm.dynamics.com/api/data/v9.1/accounts?`$select=name" `
                    -Headers @{Authorization = "Bearer xxxxx"} `
                    -Method  Get

Я также пытался сделать запрос с Invoke-WebRequest, а также curl версией в Powershell, и она не работает

Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send.
At E:\Repos\myrepo\host\connection_test.ps1:51 char:1
+ Invoke-RestMethod $hostName `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

1 Ответ

2 голосов
/ 27 января 2020

При установлении соединения с помощью Invoke-RestMethod необходимо убедиться, что шифрование, используемое вашим клиентом, принимается URI.

PowerShell по умолчанию использует TLS 1.0 для веб-запросов, но URI, к которому вы подключаетесь вероятно использует 1.1 или 1.2. Вы можете использовать следующее для принудительного использования TLS v1.1 или v1.2.

[Net.ServicePointManager]::SecurityProtocol = `
    [Net.SecurityProtocolType]::Tls11, [Net.SecurityProtocolType]::Tls12;
Invoke-RestMethod "https://host.crm.dynamics.com/api/data/v9.1/accounts?`$select=name" `
                -Headers @{Authorization = "Bearer xxxxx"} `
                -Method  Get
...