2017-01-31 53 views
2

我目前正在使用Chef來構建一本烹飪書,該烹飪書必須發出一堆針對此API的POST調用,並且我必須捕獲變量中的響應才能在第二個HTTP中使用它呼叫。使用廚師捕獲HTTP呼叫響應

我已經使用Ruby中的HTTP_REQUEST資源嘗試,但我只能火呼叫,但不知道如何響應捕獲:

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

在另一種嘗試,我試着用廚師的HTTP客戶端火掀起了POST調用和得到迴應:

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

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 

但我不斷收到這個錯誤,當我在我的節點上運行廚師客戶端10

如何使用Chef/Ruby發送POST調用並捕獲其響應?

+0

您是否找到解決方案? – inquisitive

+0

@inquiryitive還沒有 – ehjay

回答

1

您想要使用Chef::HTTP客戶端類,請參閱https://coderanger.net/chef-tips/#4的示例。

+0

嗨,你能否提供一個更具體的例子來說明如何捕獲迴應?我的調用的響應返回兩個對象,APIKey和ValidUntil,我需要捕獲APIKey值。 my_id = Chef :: HTTP.new('https:// cmdb /').post('/') 會使用這個意思my_id將等於我的post調用返回的響應嗎? – ehjay

+0

是的,你找回一個字符串,這是響應的主體。 – coderanger

+0

所以我打電話工作,我作爲一個文本得到迴應。你知道如何將它作爲一個數組返回,以便我可以在響應中解析出唯一的一個值嗎?例如,如果答案是{A:asdasda,B:asdasdasd}我只對獲取A值感興趣 – ehjay