How to handle 404 errors with Ruby HTTP::Net?

2020-06-21 04:43发布

问题:

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?

回答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.



回答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



回答3:

You need to get the response:

response = Net::HTTP.get_response(URI(url))
error = response.is_a?(Net::HTTPNotFound)
result = response.body


标签: ruby http