2017-01-31 2 views
2

В настоящее время я использую шеф-повар, чтобы выработать поваренную книгу, которая должна устранить кучу POST-вызовов этого API, и я должен захватить ответ в переменной, чтобы использовать его во втором HTTP-сообщении вызов.Захват ответа HTTP-ответа с помощью шеф-повара

Я попытался использовать ресурс Http_Request от Ruby, но я могу только стрелять вызов, но не знаю, как получить ответ захватил:

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

В очередной попытке, я попытался с помощью клиента 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 

, но я получаю эту ошибку, когда я бегу шеф-клиента на моем узле:

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

Как я могу отправить POST-вызов с помощью Chef/Ruby и захватить его ответ?

+0

Вы нашли решение? – inquisitive

+0

@inquisitive Нет еще нет – ehjay

ответ

1

Вы хотите использовать класс клиентов Chef::HTTP, см. Пример https://coderanger.net/chef-tips/#4.

+0

Привет, не могли бы вы предоставить более конкретный пример того, как отследить ответ? Ответ моего вызова возвращает два объекта: APIKey и ValidUntil, и мне нужно зафиксировать значение APIKey. my_id = Chef :: HTTP.new ('https: // cmdb /') .post ('/') С помощью этого значения my_id будет соответствовать ответу, возвращаемому моим почтовым звонком? – ehjay

+0

Да, вы возвращаете строку, которая является телом ответа. – coderanger

+0

Итак, я получил звонок на работу, и я возвращаю ответ в виде текста. Вы знаете, как вернуть его в виде массива, чтобы я мог анализировать только одно значение в ответе? Например, если ответ {A: asdasda, B: asdasdasd}, я заинтересован только в получении значения A – ehjay

Смежные вопросы