我目前正在使用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调用并捕获其响应?
答案 0 :(得分:1)
您想使用Chef::HTTP
客户端类,请参阅https://coderanger.net/chef-tips/#4以获取示例。
答案 1 :(得分:0)
在我的情况下,请求网址包含https,因此我必须添加此行,并且该行有效。
http.use_ssl = true
如果您想要一种可以处理http和https的更通用的方法,请参见此答案-