Проблемы при вызове API - PullRequest
0 голосов
/ 16 мая 2019

У нас есть два API, которые выполняют запросы POST и GET.Оба они прекрасно работали, но API, который выполняет POST, начал выдавать ошибку:

Invoke-WebRequest: Основное соединение было: непредвиденная ошибка при получении.

Я пытался провести исследование в течение нескольких дней, и все КБ указывали на какой-нибудь SSL / TLS и добавляли этот фрагмент кода:

[Net.ServicePointManager]::SecurityProtocol = "SystemDefault,Tls12, Tls11, Tls, Ssl3"

, но у меня уже был этот код изНачните.Однако я не могу найти решение своей проблемы.

ОС: Windows 2012
Версия PowerShell: 4.0

function funName ($Val1, $Val2) {
    [Net.ServicePointManager]::SecurityProtocol = "SystemDefault,Tls12, Tls11, Tls, Ssl3"
    #[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    #[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12

    $url = "https://someAPI/post.request/do-something"
    $user = "username"
    $pass = "password"
    $pair = "$($user):$($pass)"
    $encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
    $basicAuthValue = "Basic $encodedCreds "

    $Headers = @{
        "Accept"="application/json"
        Authorization = $basicAuthValue
    }

    $Body = @{
        '@type' ='x'
        parm1 = $Val1
        parm2 = $Val2
    }

    #[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 
    Invoke-WebRequest -Uri $url -Headers $Headers -Method Post -Body $Body  | Out-Null
}

## Deactivation Request ffffffff##
funName -RequestID Val1 adID Val2

Как указывалось ранее, это работало до прошлой недели.

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Установите это в начало вашего скрипта:

Add-Type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;

    namespace myTrust
    {
        public class TrustAllCertsPolicy : ICertificatePolicy 
        {
            public bool CheckValidationResult( ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) 
            {
                return true;
            }
        }
    }
"@

$AllProtocols = [System.Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols
[System.Net.ServicePointManager]::CertificatePolicy = New-Object myTrust.TrustAllCertsPolicy
0 голосов
/ 07 июня 2019

Я работал над аналогичным запросом для извлечения данных из API, и я обнаружил, что я вызываю свою функцию как funName -val1 1234 val2 9999, где мне не хватает "-" для моего параметра seconda.Как только я установил, что он снова начал работать funName -val1 1234 -val2 9999.Спасибо сообществу Stackoverflow за помощь в этом.

...