Invoke-RestMethod或Invoke-WebRequest版本的curl?

时间:2016-10-24 12:00:29

标签: powershell curl webrequest

我试图在我们的本地服务器上访问Sonarqube的web api。 Sonarqube文档中的示例都是基于curl的,我试图将它们转换为PowerShell,Invoke-WebRequest或Invoke-RestMethod。我在凭据方面遇到问题。我一直收到401 Not Notized错误。我已经回顾了我在这方面可以找到的每个帖子,而且我没有看到关于如何做到这一点的全面完整答案。

以下是我现在正在运行的内容:

$user='myUserid'
$password='myPassword'
$secpasswd = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($user, $secpasswd)
$uri="http://myServer.ad1.prod:9000/api/properties"
Invoke-RestMethod -Uri $uri -Credential $cred -Method Get

响应是:

Invoke-RestMethod : {"err_code":401,"err_msg":"Unauthorized"}

我运行了原始产品文档中定义的curl命令,它可以运行。相同的用户ID,相同的密码,相同的URI,相同的方法。

有人可以提供建议吗?

我的curl命令是:

curl -u myID:myPassword X GET http://myServer.ad.prod:9000/api/properties

1 个答案:

答案 0 :(得分:2)

我认为你需要传递这样的凭证:

$username = "user"
$password = "password"
$authInfo = ("{0}:{1}" -f $username,$password)
$authInfo = [System.Text.Encoding]::UTF8.GetBytes($authInfo)
$authInfo = [System.Convert]::ToBase64String($authInfo)
$headers = @{Authorization=("Basic {0}" -f $authInfo)}

Invoke-RestMethod -Method Head -Uri "https://pathtowhatever" -ContentType 'text/json' -Headers $headers