PowerShell Invoke-RestMethod失败

时间:2017-01-27 11:46:39

标签: rest powershell

我是PowerShell的新手,我正在尝试将REST方法用于需要OAuth2.0身份验证的应用程序。

我使用此https://msdn.microsoft.com/en-us/library/hh454950.aspx作为参考编写了以下内容:

$ClientID = 'david_web'
$client_Secret = 'Secret_123'

$Uri = "https://target_server/api/token"

$Body = "grant_type=password=$ClientID&username=$client_Secret"

$admAuth=Invoke-RestMethod -Uri $Uri -Body $Body -Method Post

$HeaderValue = "Bearer " + $admauth

$uri = "https://target_server/api/v1.0/discovery";

$result = Invoke-RestMethod -Uri $uri -Headers @{Authorization = $HeaderValue} 

$result.string.'#text'

当我跑步时,我得到:

Invoke-RestMethod:基础连接已关闭:意外错误  在发送时发生。

如果我在Linux上尝试以下操作:

curl -k -i -X POST -d 'grant_type=password&username=david_web&password=Secret_123' https://target_server/api/token

它可以工作,但我必须包含-k选项。我如何在PowerShell上执行相同的操作?

编辑:

正好运行:

$ClientID = 'david_web'
$client_Secret = 'Secret_123'
$Uri = "https://target_server/api/token"
$Body = 'grant_type=password&username=$ClientID&password=$client_Secr‌​et'    
$admAuth = Invoke-RestMethod -Method Post -Uri $Uri -Body $Body

返回:

[错误] Invokenvoke-RestMethod:底层连接已关闭:意外错误 发送时发生[错误]。 [错误]在C:\ data \ visual studio 2015 \ Projects \ PSDiscovery \ REST \ GetToken.ps1:34 [ERROR] char:12 [ERROR] + $ admAuth = Invoke-RestMethod -Method Post -Uri $ Uri -Body $ Body [ERROR] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ [ERROR] + CategoryInfo:InvalidOperation:(System.Net.HttpWebRequest:Htt [错误] pWebRequest)[Invoke-RestMethod],WebException [ERROR] + FullyQualifiedErrorId:WebCmdletWebResponseException,Microsoft.PowerShe [错误] ll.Commands.InvokeRestMethodCommand

2 个答案:

答案 0 :(得分:0)

如果ClientId或Client_Secret有特殊字符,UrlEncode在发送请求之前

$ clientIDEncoded = [System.Web.HttpUtility] :: UrlEncode($ ClientID) $ client_SecretEncoded = [System.Web.HttpUtility] :: UrlEncode($ client_Secret)

正如您在客户端密码和客户端ID中强调的那样,在进行Invoke-RestMethod

之前,您应该对它们进行编码。

答案 1 :(得分:0)

尝试一下:

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

您仅需要在一个会话中执行一次此行。效果很好。

根据此帖子https://powershell.org/forums/topic/is-it-possible-to-enable-tls-1-2-as-default-in-powershell/

,似乎没有办法将TLS1.2设置为默认值