6

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?

Nakilon
  • 34,866
  • 14
  • 107
  • 142
martini-bonanza
  • 1,515
  • 3
  • 18
  • 33

3 Answers3

11

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.

Theo
  • 131,503
  • 21
  • 160
  • 205
1

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

kristianp
  • 5,496
  • 37
  • 56
0

You need to get the response:

response = Net::HTTP.get_response(URI(url))
error = response.is_a?(Net::HTTPNotFound)
result = response.body
FelipeC
  • 9,123
  • 4
  • 44
  • 38