使用Chef捕获HTTP调用响应

时间:2017-01-31 21:51:15

标签: ruby post https chef

我目前正在使用Chef来构建一个必须触发对此API的一系列POST调用的食谱,我必须在变量中捕获响应以在第二次HTTP调用中使用它。

我尝试过使用Ruby的http_request资源,但我只能解雇这个电话但不知道如何获取响应:

http_request 'authorize' do   
action :post   
url '*****************************'   headers ({
        'Content-Type' => 'application/json'
        })   message ({
        :Username => "**********",
        :Password => "**********"
        }).to_json  
end

在另一次尝试中,我尝试使用Chef的http客户端来启动POST调用并获得响应:

  require "net/https"
  require "uri"
  require "json"
  uri = URI("******************************")
  req = Net::HTTP::Post.new(uri)
  req.set_form_data("Username" => "********", "Password" => "*********")

  res = Net::HTTP.start(uri.hostname, uri.port) do |http|
    http.request(req)
  end

  case res
  when Net::HTTPSuccess, Net::HTTPRedirection
    # OK
  else
    res.value
  end

但是当我在节点上运行chef-client时,我不断收到此错误:

EOFError
--------
end of file reached

如何使用Chef / Ruby发送POST调用并捕获其响应?

2 个答案:

答案 0 :(得分:1)

您想使用Chef::HTTP客户端类,请参阅https://coderanger.net/chef-tips/#4以获取示例。

答案 1 :(得分:0)

在我的情况下,请求网址包含https,因此我必须添加此行,并且该行有效。

http.use_ssl = true

如果您想要一种可以处理http和https的更通用的方法,请参见此答案-

https://stackoverflow.com/a/9227933/6226283