2014-01-24 107 views
0

我將用Rails的命令替換我的命令行查詢服務器

`curl -XPUT 'host:port/url' -d '{"val": "some_json"}'̀ 

,並得到結果......

某處這樣的:

response = call('put', 'host:port/url', '{"val" : "some_json"}') 

有任何預定義的方法來做到這一點在Rails或一些寶石? 我知道HTTP的命令get,但我會做'PUT'方法。

Net::HTTP.get(URI.parse('host:port/url')) 

感謝您的答覆

+0

你試過這樣做嗎? http://stackoverflow.com/questions/11403728/how-can-i-send-an-http-put-request-in-ruby – nicohvi

回答

1

您可以使用Net::HTTP來發送任何標準的http請求。

以下是一種方法,您可以使用任何有效的http方法(帶或不帶參數)連接到任何url(http/https)。

def universal_connector(api_url, api_parameters={}, method="Get") 
    # Do raise Error, if url is invalid and Method is invalid 

    uri = URI(api_url) 
    req = eval("Net::HTTP::#{method.capitalize}.new('#{uri}')") 
    req.set_form_data(api_parameters)                          
    Net::HTTP.start(uri.host, uri.port,:use_ssl => uri.scheme == 'https') do |http| 
    response = http.request(req) 
    return response.body 
    end 
end 

還有很多選擇。具體而言,Faraday。另外,read this在做出選擇之前。

+0

謝謝@asitmohama,這是一個很好的解決方案。 – pierallard

0

#get只是整個代碼(Net::HTTP Ruby庫往往是非常冗長)的簡單快捷。但是,Net::HTTP perfectly supports PUT requests

另一種選擇是使用HTTP客戶端作爲包裝。最常見的替代品是HTTPartyFaraday

HTTParty.put('host:port/url', { body: {"val" : "some_json"} }) 

作爲一個側面說明,請記住,Rails是一個框架,而不是編程語言。你的問題是關於如何在Ruby中執行HTTP PUT請求,而不是Rails。瞭解其差異很重要。