К сожалению, единственный способ проверить, работает ли ссылка, - сделать HTTP-запрос.Некоторые серверы могут реализовывать HEAD, поэтому при работе он не отвечает ни на какой контент.Но это не является обязательным требованием.
Одна вещь, которую вы можете сделать, это вручную сбросить соединение, как только вы получите заголовки.Это требует немного больше ручного труда по сравнению с просто обернуть всю сеть в простой метод:
Net::HTTP.start(host, ...) do |http|
http.request_get(path) do |response|
response.read_body do
# headers have been received, this block receives
# each body chunk
break
end
end
end
Например
resp = Net::HTTP.start('www.google.com', use_ssl: true) { |http|
http.request_get('/') { |resp|
resp.read_body { break }
}
}
resp.code
=> "200"
resp.each_header.to_a
=> [["date", "Mon, 21 Jan 2019 10:09:15 GMT"], ["expires", "-1"], ...]
resp['date'] # you can read headers in a hash-like way
=> "Mon, 21 Jan 2019 10:09:15 GMT"
resp.body
=> ""
Таким образом, тело не ждет, и вы можетепроверьте заголовки, чтобы увидеть, был ли ответ «успешным».Http-соединение прерывается, как только отправляется первый фрагмент данных.Если сервер не отправляет чанки, вам все равно придется получить все ответы.