拔出我的头发试图获得对JIRA票证的REST更新,特别是在指定要在事务中使用的证书文件时。
我在Ruby 2.2.0中使用RestClient gem(2.0.0)。
根据文档(here和here),我需要创建一个新资源,然后在其上调用一个方法,而不是更短的更直接的语法。
使用这种构造样式对JIRA的POST请求正常工作:
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)
对于非SSL JIRA安装执行此操作并省略SSL CA File参数时,更新的部分是更新正常。我可以通过Postman进行相同的更新调用,它可以正常工作。
在文档中给出的示例中,有一些示例指定了带有GET的证书文件,但没有指定其他动词,只有一个示例是Resource.post(有效负载)。我怀疑我把ssl_ca_file放在了错误的地方,但我已经尝试了所有我能想到的变化都无济于事。
(有人会问为什么我不能依赖系统的证书存储。我不能;我已经尝试了所有东西,只指定了cert文件允许我连接。)
有什么想法吗?
答案 0 :(得分:0)
我的错...答案在于error.response.body,其中包含一条特定于JIRA的错误消息。根本不是SSL选项。