2014-01-24 110 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。了解其差异很重要。