当 cmd 中的 cURL 工作正常时,Invoke-RestMethod 返回 "invalid user"
Invoke-RestMethod returning "invalid user" when cURL in cmd works fine
我正在尝试使用 Invoke-RestMethod cmdlet 运行 PowerShell 中的 cURL 命令,但它无法正常工作。
它连接到服务器并且API 密钥被接受。但是,凭证没有正确传递,我收到了
的回复
{"error":"Invalid user . Can't find credentials."}
当我在cmd中运行以下cURL命令时:
curl -X POST "https://valid_URI" -H "Content-Type: application/json" -H "x-api-key:KEY" -d "{"client_id":"VALID_ID","client_secret":"SECRET"}"
我得到了预期的响应:
{"auth_token": "TOKEN"}
太棒了,很管用!
从这里我想自动响应,因为令牌只能在 24 小时内使用,所以我认为 PowerShell 是使用 Invoke-RestMethod cmdlet 的好方法。
所以我尝试 运行:
$Headers = @{
'x-api-key' = 'KEY'
'client_id' = 'VALID_ID'
'client_secret' = 'SECRET'
}
$Parameters = @{
Uri = 'VALID_URI'
Method = 'Post'
Headers = $Headers
ContentType = 'application/json'
}
Invoke-RestMethod @Parameters
这给出了以下输出:
Invoke-RestMethod : {"error":"Invalid user . Can't find credentials."}
At line:13 char:1
+ Invoke-RestMethod @Parameters
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
我尝试了几种不同的变体,并更改了引号,但均无济于事。
我怀疑包含“==”的秘密由于某种原因被切碎了,但是使用单引号应该否定了这一点,因为 PowerShell 应该将单引号中的任何内容解释为字面意义吗?
模仿列出的 curl 命令:
curl -X POST "https://valid_URI" -H "Content-Type: application/json" -H "x-api-key:KEY" -d "{"client_id":"VALID_ID","client_secret":"SECRET"}"
您需要在正文而不是页眉中包含 client_id 和 client_secret。
$Headers = @{
'x-api-key' = 'KEY'
}
$Body = @{
'client_id' = 'VALID_ID'
'client_secret' = 'SECRET'
} | ConvertTo-Json
$Parameters = @{
Uri = 'VALID_URI'
Method = 'Post'
Headers = $Headers
Body = $Body
ContentType = 'application/json'
}
Invoke-RestMethod @Parameters
Invoke-RestMethod -Method Post -Uri "VALID_URI" -Headers @{"Content-Type" = "application/json"; "x-api-key" = $API_KEY} -Body (ConvertTo-Json @{"client_id" = "VALID_ID"; "client_secret" = "SECRET"})
这就是最终的效果。我离得不远,谢谢大家的帮助!
我正在尝试使用 Invoke-RestMethod cmdlet 运行 PowerShell 中的 cURL 命令,但它无法正常工作。
它连接到服务器并且API 密钥被接受。但是,凭证没有正确传递,我收到了
的回复{"error":"Invalid user . Can't find credentials."}
当我在cmd中运行以下cURL命令时:
curl -X POST "https://valid_URI" -H "Content-Type: application/json" -H "x-api-key:KEY" -d "{"client_id":"VALID_ID","client_secret":"SECRET"}"
我得到了预期的响应:
{"auth_token": "TOKEN"}
太棒了,很管用!
从这里我想自动响应,因为令牌只能在 24 小时内使用,所以我认为 PowerShell 是使用 Invoke-RestMethod cmdlet 的好方法。
所以我尝试 运行:
$Headers = @{
'x-api-key' = 'KEY'
'client_id' = 'VALID_ID'
'client_secret' = 'SECRET'
}
$Parameters = @{
Uri = 'VALID_URI'
Method = 'Post'
Headers = $Headers
ContentType = 'application/json'
}
Invoke-RestMethod @Parameters
这给出了以下输出:
Invoke-RestMethod : {"error":"Invalid user . Can't find credentials."}
At line:13 char:1
+ Invoke-RestMethod @Parameters
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
我尝试了几种不同的变体,并更改了引号,但均无济于事。 我怀疑包含“==”的秘密由于某种原因被切碎了,但是使用单引号应该否定了这一点,因为 PowerShell 应该将单引号中的任何内容解释为字面意义吗?
模仿列出的 curl 命令:
curl -X POST "https://valid_URI" -H "Content-Type: application/json" -H "x-api-key:KEY" -d "{"client_id":"VALID_ID","client_secret":"SECRET"}"
您需要在正文而不是页眉中包含 client_id 和 client_secret。
$Headers = @{
'x-api-key' = 'KEY'
}
$Body = @{
'client_id' = 'VALID_ID'
'client_secret' = 'SECRET'
} | ConvertTo-Json
$Parameters = @{
Uri = 'VALID_URI'
Method = 'Post'
Headers = $Headers
Body = $Body
ContentType = 'application/json'
}
Invoke-RestMethod @Parameters
Invoke-RestMethod -Method Post -Uri "VALID_URI" -Headers @{"Content-Type" = "application/json"; "x-api-key" = $API_KEY} -Body (ConvertTo-Json @{"client_id" = "VALID_ID"; "client_secret" = "SECRET"})
这就是最终的效果。我离得不远,谢谢大家的帮助!