Размещение Jira работает на Python, но не на PowerShell - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь отправить POST-запрос Jira со скриптом, и он отлично работает с Python, но не с PowerShell.

Я попытался GET-запрос получить некоторые данные от Jira с помощью PowerShell, и это сработало,поэтому я думаю, что данные для входа верны. Поэтому мое единственное беспокойство - это полезная нагрузка. Возможно, мой формат JSON неверен.

Python (работает):

headers = {
  "Accept": "application/json;charset=utf-8",
  "Content-Type": "application/json"
}

payload = {
  "fields": {
    "project": {
      "key": "SDF"
    },
    "summary": "test",
    "description": "Creating of an issue using project keys and issue type names using the REST API",
    "issuetype": {
      "name": "Request"
    }
  }
}

password = open('passwords_jira2snow.txt').readlines()
jira_login = HTTPBasicAuth(password[0].rstrip('\n'), password[1].rstrip('\n')) 

r = requests.post(url="domain/rest/api/2/issue", data = json.dumps(payload), auth=jira_login, verify=False, headers=headers)
#jira_response = json.loads(r.text)
print(r.text)

PowerShell (не работает):

$payload = ('{
  "fields": {
    "project": {
      "key": "SDF"
    },
    "summary": "test",
    "description": "Creating of an issue using project keys and issue type names using the REST API",
    "issuetype": {
      "name": "Request"
    }
  }
}')
$hdrs1 = @{}
$hdrs1.Add("login",$login)
$hdrs1.Add("password",$password)

$CreateJira = Invoke-RestMethod -Method POST -Headers $hdrs1 -Uri "domain/rest/api/2/issue" -Body $payload -ContentType "application/json"
Write-Host $CreateJira

Я получаю

ERROR: REST call to sessionauth endpoint failed with error 'ProtocolError -
System.Net.WebException: The remote server returned an error: (400) Bad Request.
     at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.GetResponse(WebRequest request)
     at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.ProcessRecord()'
Current endpoint: 'https://domain/sessionauth/v1/authenticate'

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Проверьте документацию внутри PS с помощью командлета get-help Invoke-RestMethod -Examples. Есть пример того, как обрабатывать запрос POST. Вместо того, чтобы устанавливать свои учетные данные в заголовке, создайте объект Credentials и используйте параметр -Credentials в Invoke-RestMethod.

Учетные данные обычно обрабатываются иначе, чем запросы GET, чем запросы POST для REST.

С другой стороны, я рекомендую вместо этого использовать Модуль JiraPS , поэтому вам не нужно изобретать велосипед и сосредоточиться на выполнении своей работы!

0 голосов
/ 30 сентября 2019

Не знаю почему, но помогло определение учетных данных другим способом. Это странно, потому что запрос GET работал по умолчанию.

 $login = "test"
 $password = "test"  
 $pair = "$($login):$($password)"
 $encodedCreds = 
 [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))  
 $hdrs1.Add("Authorization", "Basic $encodedCreds")  
...