pierallard
pierallard

Reputation: 3371

Query server with PUT method

I will replace my command line

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

by a Rails command, and get the result...

Somewhere like this :

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

Is there any predefined method to do this in Rails, or some gem ? I know the command get of HTTP, but I will do a 'PUT' method.

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

Thanks for your replies

Upvotes: 0

Views: 148

Answers (2)

asitmoharna
asitmoharna

Reputation: 1532

You can use Net::HTTP to send any standard http requests.

Here is a way, you can connect to any url ( http / https ), with any valid http methods with or without parameters.

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

There are many alternatives available as well. Specifically, Faraday. Also, read this before making a choice.

Upvotes: 1

Simone Carletti
Simone Carletti

Reputation: 176382

#get is just a simple shortcut for the whole code (Net::HTTP Ruby library tends to be very verbose). However, Net::HTTP perfectly supports PUT requests.

Another alternative is to use an HTTP client as a wrapper. The most common alternatives are HTTParty and Faraday.

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

As a side note, please keep in mind that Rails is a framework, not a programming language. Your question is about how to perform an HTTP PUT request in Ruby, not Rails. It's important to understand the difference.

Upvotes: 0

Related Questions