Рву волосы, пытаясь заставить REST-обновление работать с билетом JIRA, особенно при указании файла сертификата, который будет использоваться в транзакции.
Я использую гем RestClient (2.0.0) в Ruby 2.2.0.
Согласно документации (здесь и здесь) Мне нужно создать новый ресурс, а затем вызвать для него метод, а не более короткий более непосредственный синтаксис.
POST-запросы к JIRA отлично работают, используя этот стиль построения:
endpoint = "#{opts['jiraHost']}/rest/api/2/issue"
request = RestClient::Resource.new(endpoint,
ssl_ca_file: certfile,
headers: {
Authorization: 'Basic b3B....',
content_type: :json,
accept: :json}
)
response = request.post(ticketParams.to_json)
Я получаю ответ об успехе, и создается тикет.
Слегка измененная версия, в которой используется команда PUT, завершается с ошибкой 400 Bad Request.
endpoint = "#{opts['jiraHost']}/rest/api/2/issue/#{ticket[:issueKey]}"
request = RestClient::Resource.new(endpoint,
ssl_ca_file: certfile,
headers: {
Authorization: 'Basic b3B....',
content_type: :json,
accept: :json}
)
response = request.put(ticketParams.to_json)
Беспокойство заключается в том, что при установке JIRA без SSL и исключении аргумента SSL CA File обновление работает нормально. Я могу сделать такой же вызов обновления через Postman, и он отлично работает.
В примерах, приведенных в документации, были примеры указания файла сертификата с помощью GET, но не других глаголов, и только один пример Resource.post(payload). Я подозреваю, что помещаю файл ssl_ca_file не в то место, но я пробовал все возможные варианты, но безрезультатно.
(Кто-то спросит, почему я не могу полагаться на системное хранилище сертификатов. Я не могу; я пробовал все, и только указание файла сертификата позволяет мне подключиться.)
Любые идеи?
RestClient.log = 'stdout'
- person Alexandre Angelim   schedule 28.07.2016