I have a list of urls, I need to check which of the following urls are valid.
The code I used is
require 'net/http'
url = 'http://mysite.com'
res = Net::HTTP.get_response(URI.parse(url.to_s))
puts res.code
Here I can check the response code 200 for a valid url. My concern is the 'res' object returned contains code, body, etc. So my response (res object) becomes heavy. Is there any way so that I can get only the response code. I don't need any other info. Please help
I didn't check if it's possible to do with Net::HTTP, but you can use Curb, which is the Ruby wrapper for curl.
Look at Curl::Easy#http_head
With Net::HTTP you can also use HTTP#head
, which requests headers from the server using the HEAD method.
Information about HTTP's method HEAD:
9.4 HEAD
The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. The metainformation contained in the HTTP headers in response to a HEAD request SHOULD be identical to the information sent in response to a GET request. This method can be used for obtaining metainformation about the entity implied by the request without transferring the entity-body itself. This method is often used for testing hypertext links for validity, accessibility, and recent modification.
To get the response code of a page:
require 'net/http'
response = nil
Net::HTTP.start('www.example.com', 80) {|http|
response = http.head('/page.html')
}
puts response.code
This is easiest in Faraday:
# one line to make request
response = Faraday.head url
# example with headers
resource_size = response.headers['Content-Length']
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With