2016-08-13 60 views
0

使用Jira API 2和PowerShell 5 Invoke-RestMethod我可以成功執行GET,但在嘗試使用POST方法在我的項目中創建問題時,我總是收到(400) Bad RequestJira API POST和Invoke-RestMethod

$user = [System.Text.Encoding]::UTF8.GetBytes("me:mypassword") 
$headers = @{Authorization = "Basic " + [System.Convert]::ToBase64String($user)} 
$data = Get-Content D:\scripts\powershell\issue.txt 

Invoke-RestMethod -Uri "https://agile.mycompany.com/rest/api/2/issue/" -Method POST -Headers $headers -ContentType "application/json" -Body $data 

$data變量結構良好的JSON用於吉拉:

{ 
    "fields": 
    { 
     "project":{"Key": "ITS"}, 
     "summary":"Rest Test 1", 
     "issuetype":{"name": "Task"}, 
     "assignee":{"key": "myusername"}, 
     "priority":{"id": "3"}, 
     "description": 
      "||Host Name||IP Address||Comments|| 
      |some-pc|192.168.1.1| |", 
     "duedate": "2016-09-11" 
    } 
} 

我是項目業主,所以這不是一個權限問題。

+0

該代碼看起來不錯。你有權訪問服務器日誌嗎?他們對此有何評論?你是否嘗試使用'curl'而不是'Invoke-RestMethod'?提琴手的請求看起來是否一樣? –

+0

Ansgar,我嘗試使用捲曲窗口。同樣的問題 - GET的作品,但郵政......好吧,它不會失敗或成功。腳本運行,並且永遠不會成功或失敗。我將在一個帶捲曲的Linux盒子上做這件事,看看會發生什麼。 我實際上一直在嘗試使用jira-ruby gem,但是我的連接對象間歇性地失敗,我不知道爲什麼。 – Brian

+0

好的。在一個centos服務器上捲曲嘗試。我添加了「自我」和「ID」KV對到「項目」字段,同樣的錯誤。「errorMessages」:[],「errors」:{「project」:「project is required」}} 全部3次。 – Brian

回答

0

問題解決。問題在於我正在使字段名稱的第一個字母「CAPITALIZING」。顯然,Jira對CASE非常敏感。 Trondh - 感謝您使用郵遞員的建議。郵差從失敗的API調用中產生的錯誤非常簡潔。

0

Get-content很棘手,因爲它實際上會產生一個字符串數組,其中文本文件中的每一行都是該數組中的一個對象。要解決這個問題,最好的辦法可能是使用的.Net的文件讀取方法代替:

$data = [System.IO.File]::ReadAllText("D:\scripts\powershell\issue.txt")

順便說一句,你可以使用常規的PS憑據對象,而不是手動構建請求頭。

在附註中,使用郵遞員等工具測試api總是一個好主意。這將讓你確認你發佈有效的json,而不必擔心你的代碼做了奇怪的事情。

+0

'Get-Content | Out-String「,」Get-Content -Raw「(PowerShell v3和更新版本),或者簡單地將變量放在雙引號('-Body」$ data「')中也可以做到這一點。但是,'Invoke-RestMethod'應該可以很好地處理一系列行。而且,如果這是導致錯誤,那麼來自Linux機器的'curl'調用應該已經起作用了。 –

+0

來自get-credential的常規PS憑證未通過認證授予Jira。我在構建請求頭之前嘗試過。此外,.NET調用(與獲取內容相對)產生相同的結果。 ** Ansgar ** - 在curl聲明中打出良好的號召。實際上,我進一步去了 - 對於PS腳本以及curl語句:我將文本拆分爲一行,以消除隱藏\ n或由NP ++注入時可能存在的問題,當我創建文本文件。 – Brian

+0

附註 - ** Trondh **和** Ansgar ** - 我如何爲您提供明星的幫助? – Brian