How to handle 404 errors with Ruby HTTP::Net?
10,010
Solution 1
Rewrite your code like this:
uri = URI.parse(url)
result = Net::HTTP.start(uri.host, uri.port) { |http| http.get(uri.path) }
puts result.code
puts result.body
That will print the status code followed by the body.
Solution 2
As you know, your code will always return the response body, whether there is an error or not. In order to test the response code, use Theo's answer, and the following if statement, for example:
if result.code.to_i < 400
puts "success"
end
This example converts the code (which is a string) to an integer, and treats redirects and various 200 codes as successful.
See this for the various codes returned: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
Author by
martini-bonanza
Updated on June 13, 2022Comments
-
martini-bonanza almost 2 years
I'm trying to parse web pages but I sometimes get 404 errors. Here's the code I use to get the web page:
result = Net::HTTP::get URI.parse(URI.escape(url))
How do I test if
result
is a 404 error code? -
martini-bonanza almost 14 yearsThanks! I tried this but result.status didn't work. Instead, I checked result.class.name == "HTTPOK", it does the trick :-)
-
Theo almost 14 yearsSorry, it should have been
result.code
, notresult.status
. I've updated my answer. -
Veck Hsiao over 8 yearsNote: URI is in module
net/http