9

在调用Invoke-RestMethod使用 Powershell 时,例如:

Invoke-RestMethod -Method Get -Uri "https://google.com/api/GetData" -Headers $headers

$headers存在

$headers = @{
    Authorization="Secret $username $password"
    Content='application/json'
}

$username参数和的预期格式是什么$password

4

3 回答 3

7

据我所知,您必须在请求标头中发送 OAuth2 令牌。

$headers = @{
    Authorization="Bearer $token"
}

也许下面的博客文章让您知道如何做到这一点。 https://lazyadmin.nl/it/connect-to-google-api-with-powershell/

于 2019-01-16T09:47:38.313 回答
1

Rufer7提供的解决方案是正确的。我只想再添加一件事,您还可以在 Invoke-WebRequest 方法中传递内容参数,使标头更简单,并以 Json 格式获取输出。所以我的精炼脚本会是这个样子。

Powershell脚本:

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


$headers = @{
    Authorization="Bearer $token"
}

$responseData = (Invoke-WebRequest -Uri $Url -Method Get -Headers $headers -UseBasicParsing -ContentType "application/json").Content | ConvertFrom-Json | ConvertTo-Json

仅当您观察到此错误时,第一行才是可选的,否则您可以忽略它。

“Invoke-WebRequest:请求被中止:无法创建 SSL/TLS 安全通道。”

于 2020-01-01T14:01:25.817 回答
1

在我的场景中,我使用了 REST API 调用的主体usernamepassword我的身体是:

$body = [PSCustomObject] @{
  username=$Credential.UserName; 
  password=$Credential.GetNetworkCredential().Password;
} | ConvertTo-Json

在函数中我使用 PSCredential 类:

[System.Management.Automation.PSCredential]
[System.Management.Automation.Credential()]
$Credential = [System.Management.Automation.PSCredential]::Empty,

最后,我这样称呼它:

Invoke-RestMethod -Method Get -Uri "https://google.com/api/GetData" -ContentType application/json -Body $body

ContentType设置,因为我希望 JSON 作为响应。

于 2020-07-20T10:15:05.797 回答