5

I'm new in ruby (and in programming too)

I have built this code:

    #This method executing a url and give the response in json format
    def get url
      return JSON.parse(RestClient::Request.execute(method: :get, url: url))
    end

And now I'm trying to handle a case that the response code from any of the urls is not ok, and I want to replace it with error message "error"

I have tried to replace the get method with this code:

def get url
 if ((RestClient::Request.execute(method: :get, url: url)).code == 200)
    return JSON.parse(RestClient::Request.execute(method: :get, url: url))
 else
  error = "error"
    return  error.as_json
 end
end

But if the response from the url is not 200 I get an error message "406 not acceptable" instead of "error"

Thanks in advance

Joel
  • 477
  • 1
  • 8
  • 14

1 Answers1

7

RestClient::Request will raise an exception when it receives error response (response code other than 2xx/3xx):

  • for result codes between 200 and 207, a RestClient::Response will be returned
  • for result codes 301, 302 or 307, the redirection will be followed if the request is a GET or a HEAD
  • for result code 303, the redirection will be followed and the request transformed into a GET
  • for other cases, a RestClient::Exception holding the Response will be raised; a specific exception class will be thrown for known error codes
  • call .response on the exception to get the server's response

Documentation

You should handle that exception:

def get url
  result = RestClient::Request.execute(method: :get, url: url)
  JSON.parse(result)
rescue RestClient::Exception
  "error" # no need to call 'as_json'
end

More on Ruby exception handling:

Ruby Exceptions

EugZol
  • 6,476
  • 22
  • 41
  • 2
    Perfect! `def get url result = RestClient::Request.execute(method: :get, url: url) JSON.parse(result) rescue RestClient::Exception => e e.response.body e.response.code end` – Tilak M Divakar Jul 24 '20 at 23:05