Invoke-RestMethod:发送到标头时找不到请求的身份验证数据

Posted

技术标签:

【中文标题】Invoke-RestMethod:发送到标头时找不到请求的身份验证数据【英文标题】:Invoke-RestMethod : Could not find authentication data on request when send to headers 【发布时间】:2019-10-29 19:01:39 【问题描述】:

我在 azure devops 版本中添加了 powershell 脚本,并尝试使用带有授权令牌和 xml 文件的 Invoke-WebRequest 发送 POST 请求。

我做错了什么?

我从另一个 POST 请求中获取授权令牌,并尝试使用此令牌创建标头并尝试使用 X 射线端点发送 xml 文件(NUnit XML 结果 - POST /api/v1/import/execution/nunit) https://confluence.xpand-it.com/display/XRAYCLOUD/Import+Execution+Results+-+REST#ImportExecutionResults-REST-NUnitXMLresults

授权令牌,如标头参数 类似powershell参数的内容类型

$bodyForAuth=@"client_id"="...";
"client_secret"="...";

$jsonAuth=Invoke-WebRequest -Uri $urlForAuth -Method POST -Body ($bodyForAuth|ConvertTo-Json) -ContentType "application/json"
$authToken=ConvertFrom-Json -InputObject $jsonAuth

$headers=@ Authorization = "Bearer $authToken" 

Invoke-WebRequest -Headers $headers -Uri $urlForXrayApi -Method POST -ContentType "text/xml" -InFile $TestResultsXmlPath

我有错误:“Invoke-RestMethod:找不到请求的身份验证数据”

我也尝试这样发送:

$headers=@ Authorization = "Bearer $authToken";"Content-Type"="text/xml" 

Invoke-WebRequest -Headers $headers -Uri $urlForXrayApi -Method POST -InFile $TestResultsXmlPath

也有同样的错误:"Invoke-RestMethod : Could not find authentication data on request"

但是如果我发送这样的 POST 请求(没有 Content-Type):

$bodyForAuth=@"client_id"="...";
"client_secret"="...";

$jsonAuth=Invoke-WebRequest -Uri $urlForAuth -Method POST -Body ($bodyForAuth|ConvertTo-Json) -ContentType "application/json"
$authToken=ConvertFrom-Json -InputObject $jsonAuth

$headers=@ Authorization = "Bearer $authToken" 

Invoke-WebRequest -Headers $headers -Uri $urlForXrayApi -Method POST -InFile $TestResultsXmlPath

我有服务器错误:"Invoke-RestMethod : "error":"Missing data in the nunit results import request""

Power Shell v. 5.1

为什么当我发送到 headers 服务器时无法精细授权数据?

【问题讨论】:

【参考方案1】:

我需要括号,所以我将$TestResultsXmlPath 更改为$(TestResultsXmlPath)

Invoke-WebRequest `
    -Headers $headers `
    -Uri $urlForXrayApi `
    -Method POST `
    -InFile $(TestResultsXmlPath)

【讨论】:

以上是关于Invoke-RestMethod:发送到标头时找不到请求的身份验证数据的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 Origin 标头时找不到路由

尝试安装 pg gem 时找不到'libpq-fe.h 标头

使用 Wt c++ 时找不到 Postgres 标头

归档应用程序时找不到 Swift Objective-C 标头

无法使用 Invoke-RestMethod 更新工作项历史记录

如何在主机将其发送到网络之前修改数据包标头(IP标头,TCP标头)