2016-08-13 2 views
0

Использование Jira API 2 и PowerShell 5 Invoke-RestMethod Я могу успешно выполнить GET, но я продолжаю получать (400) Bad Request при попытке метода POST создать проблему в моем проекте. ПеременнаяJira 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 для Jira:

{ 
    "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'? Запросы выглядят одинаково в Fiddler? –

+0

Ансгар, я попытался использовать завиток для окон. такая же проблема - GET работает, но POST ... ну, это не подводит или не удастся. Скрипт запускается и просто никогда не преуспевает или не сработает. Я сделаю это на коробке с локотью и посмотрю, что произойдет. Я действительно пытался использовать жемчужину jira-ruby, но мой объект соединения прерывается с перерывами, и я понятия не имею, почему. – Brian

+0

все в порядке. Пробовал завиток на сервере centos. {"errorMessages": [], "errors": {"project": "project required"}} Я добавил пары «self» и «ID» KV в поле «project», ту же ошибку все 3 раза. – Brian

ответ

0

Проблема решена. Дело в том, что я КАПИТАЛИЗАЦИЯ первой буквы названий полей. По-видимому, Джира очень чувствительна к CASE. Trondh - спасибо за рекомендацию использовать почтальон. Ошибки, которые возникали от почтальона от неудачных вызовов API, были очень краткими.

0

Get-content сложно, потому что на самом деле это приведет к массиву строк, где каждая строка в вашем текстовом файле является объектом в этом массиве. Лучший способ обойти это, вероятно, используют методы чтения файла .NET вместо:

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

Кстати, вы можете использовать обычный объект п.с. удостоверения вместо того, чтобы вручную создать свой заголовок запроса.

На боковой ноте всегда полезно протестировать ваш api с помощью такого инструмента, как почтальон. Это позволит вам проверить, что вы публикуете действительный json, не беспокоясь о том, что ваш код делает странные вещи.

+0

'Get-Content | Out-String', 'Get-Content -Raw' (PowerShell v3 и новее) или просто поместить переменную в двойные кавычки (' -Body "$ data" ') будут делать то же самое. Однако 'Invoke-RestMethod' должен отлично работать с массивом строк.Кроме того, если это вызвало ошибку, вызов 'curl' из окна Linux должен был работать. –

+0

Регулярные учетные данные PS от get-credential не удались auth к Jira. Я пробовал это, прежде чем я построил заголовок запроса. Кроме того, вызов .NET (в отличие от get-content) дает тот же результат. ** Ансгар ** - хороший призыв к заявлению на скручивание. Я действительно пошел еще дальше - как для сценария PS, так и для оператора curl: я обрушил текст в одну строку, чтобы исключить возможность того, что может возникнуть проблема со скрытыми \ n или \ t, введенными NP ++, когда я создал текстовый файл. – Brian

+0

На боковой ноте - ** Тронд ** и ** Ансгар ** - как я могу дать вам, ребята, звезды за вашу помощь? – Brian