Правильный синтаксис для RestClient::Resource PUT при использовании ssl_ca_file

Рву волосы, пытаясь заставить 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 не в то место, но я пробовал все возможные варианты, но безрезультатно.

(Кто-то спросит, почему я не могу полагаться на системное хранилище сертификатов. Я не могу; я пробовал все, и только указание файла сертификата позволяет мне подключиться.)

Любые идеи?


person ScottyDont    schedule 27.07.2016    source источник
comment
Пробовали ли вы метод #execute напрямую?   -  person Alexandre Angelim    schedule 28.07.2016
comment
Попробовал, заправив параметры в хэш параметров заголовков, как показано в документах, с той же ошибкой 400: RestClient::Request.execute(method::put, url: endpoint, ssl_ca_file: certfile, headers: options), где параметры хэш выглядит как {:authorization=›Basic b3B..., :content_type=›:json, :params=› {fields=› {customfield_15110=›0,33%, customfield_15122=›0,41% } }   -  person ScottyDont    schedule 28.07.2016
comment
Я никогда не использовал гем RestClient, но это, безусловно, похоже на ошибку. Вы пытались включить регистратор для просмотра запроса. RestClient.log = 'stdout'   -  person Alexandre Angelim    schedule 28.07.2016


Ответы (1)


Плохо... ответ лежал в файле error.response.body, который содержал конкретное сообщение об ошибке JIRA. Варианта SSL вообще не было.

person ScottyDont    schedule 29.07.2016