0

你可以帮帮我吗?

我正在尝试使用 Powershell Invoke-WebRequest cmdlet 在 Jira 中创建问题。我收到 400 Bad Request 错误。

我能够使用 Postman 发送成功的请求,因此我确保正文语法正确并且我有足够的权限。

我的代码:

$body = @{ 
    "fields" = @{
            "project"=
            @{
                "key"= "ProjectKey"
            }
    
            "summary"= "Test"
    
            "description"= "Test"
            "issuetype" =@{
                "id"= "10705"
    
            }
            "priority"= @{
                "id"= "18"
            }
            "reporter"= @{"name"= "MyName"}
            
    }
    
    }
    
    
    $Headers =  @{
    Authorization = "Basic QWxla0Zblablablablablablabla" #I took it from Postman
    }
    
    $restapiuri = "https://jira.domain.com/rest/api/2/issue"
    
    Invoke-RestMethod -Uri $restapiuri -ContentType "application/json"  -Body $body -Method POST -Headers $Headers

例如,我可以成功执行

Invoke-RestMethod "https://jira.domain.com/rest/api/2/issue/createmeta" -Headers $Headers 

我已经花了很多时间来解决这个问题,但仍然无法创建问题。

任何帮助,请

4

1 回答 1

2

对于 Jira SERVER 的基本身份验证,需要在标头中以 Base64 编码提供凭据,您需要在通过 Powershell Invoke-WebRequest 方法提供凭据之前执行此操作。这是如何做到的:

$username = "The username here"
$password = "The password or token here"

# Convert the username + password into a Base64 encoded hash for basic authentication
$pair = "${username}:${password}"
$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
$base64 = [System.Convert]::ToBase64String($bytes)
$headers = @{ Authorization = "Basic $base64" }

接下来,在 PowerShell 中,如果您将请求的主体构建为表格,就像您展示的那样,不需要用引号将表格元素包装起来,只需保持原样,但您确实需要在提交之前将表格转换为 JSON 格式,如下所示:

$body = @{
 fields = @{
   project = @{
    key = "ProjectKey"
   }
   issuetype = @{
    id = "10705" # Or refer to the Issue type by its name eg. name = "Story"
   }
   summary = "Test"
  }
}
# Convert the body to JSON format
$body = $body | ConvertTo-Json -Depth 50

我假设您的 $Uri 字符串包含 Jira 服务器的实际 URL,而不是示例 'jira.domain.com'

从正文中的一个简单请求开始,就像我展示的那样,它只包含创建问题所需的最低限度,它将在使请求变得更复杂之前检查您的基本代码是否正常工作。

于 2021-04-11T00:03:41.573 回答