拔出我的头发,试图使JIRA票据的REST更新正常工作,特别是在指定要在事务中使用的证书文件时。
我正在使用Ruby2.2.0中的RestClient gem (2.0.0)。
根据文档(这里和这里),我需要创建一个新的资源,然后在它上调用一个方法,而不是更短、更直接的语法。
使用这种构造样式向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坏请求中失败。
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安装执行此操作并忽略SSL参数时,更新工作正常。我可以通过邮递员打同样的更新电话,它可以正常工作。
在文档中给出的示例中,有使用GET (而不是其他谓词)指定证书文件的示例,并且只有一个Resource.post(有效负载)示例。我怀疑我把ssl_ca_file放在了错误的位置,但我尝试了所有我能想到的变体,但都没有用。
(有人会问我为什么不能依赖系统的证书存储。我做不到;我已经尝试了所有的方法,只有指定cert文件才允许我连接。)
有什么想法吗?
发布于 2016-07-29 19:50:57
我的错..。答案在于error.response.body,它包含JIRA特定的错误消息。根本不是SSL选项。
https://stackoverflow.com/questions/38623504
复制相似问题