web-dev-qa-db-fra.com

Une erreur inattendue s'est produite lors de l'exécution d'une requête Reste non autorisée simple

J'ai un noeud final de repos qui n'effectue pas de vérification d'authentification. Je peux lancer une commande simple depuis Linux:

curl -k https://application/api/about

Cela répond.

Cependant, si vous essayez ce qui suit sur PowerShell, cela échoue:

Invoke-RestMethod https://application/api/about

Alors je reçois:

Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send.
At line:1 char:1
+ Invoke-RestMethod $Application
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

Quelqu'un pourrait-il me dire, s'il vous plaît, comment je peux résoudre ce problème?

EDIT:

Essayer avec Invoke-WebRequest:

Invoke-WebRequest -Uri "https://application/api/about"

Invoke-WebRequest: La connexion sous-jacente a été fermée: une erreur inattendue s'est produite lors d'un envoi. A la ligne: 1 caractère: 1 + Invoke-WebRequest -Uri " https: // application/api/a ... + ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ + CategoryInfo: InvalidOperation: (System.Net.HttpWebRequest: HttpWebRequest) [Invoke-WebRequest], WebException + FullyQualifiedErrorId: WebCmdletWebResponseException, Microsoft.PowerShell.Commands.InvokeWebRequestCommand

33
dross

En utilisant:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Extrait de Powershell 3.0 Invoke-WebRequest HTTPS échoue pour toutes les demandes .

68
dross

dans mon cas, l’astuce de TLS n’a pas fonctionné, cela semble être un bogue dans Powershell. vous devez ajouter le rappel en utilisant du code .net au lieu d'un scriptblock.

#C# class to create callback
$code = @"
public class SSLHandler
{
    public static System.Net.Security.RemoteCertificateValidationCallback GetSSLHandler()
    {

        return new System.Net.Security.RemoteCertificateValidationCallback((sender, certificate, chain, policyErrors) => { return true; });
    }

}
"@

#compile the class
Add-Type -TypeDefinition $code

#disable checks using new class
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = [SSLHandler]::GetSSLHandler()
#do the request
try
{
    invoke-WebRequest -Uri myurl -UseBasicParsing
} catch {
    # do something
} finally {
   #enable checks again
   [System.Net.ServicePointManager]::ServerCertificateValidationCallback = $null
}
12
Justin