Выполнение HTTP HEAD-запроса с таймаутом в Ruby - PullRequest
2 голосов
/ 04 ноября 2011

В приложении Rails я хотел бы сделать HTTP-запрос HEAD для ресурса (предоставленный пользователем URL), чтобы убедиться, что он существует.Я также хотел бы тайм-аут, чтобы гарантировать, что метод потерпит неудачу после разумного периода ожидания.Какой самый простой способ сделать это (используя стандартную библиотеку, если это возможно)?

1 Ответ

11 голосов
/ 04 ноября 2011

Попробуйте этот фрагмент:

require 'net/http'

Net::HTTP.start('www.some_site.com') do |http|
  http.open_timeout = 2
  http.read_timeout = 2
  req = Net::HTTP::Head.new('/')
  http.request(req).each { |k, v| puts "#{k}: #{v}" }
end

Надеюсь, это то, что вы ищете.

ОБНОВЛЕНИЕ

Потому что есть head метод, который выглядит как

def head(path, initheader = nil)
  request(Head.new(path, initheader))
end

Вы также можете использовать этот фрагмент:

require 'net/http'

Net::HTTP.start('www.rubyinside.com') do |http|
  http.open_timeout = 2
  http.read_timeout = 2
  http.head('/').each { |k, v| puts "#{k}: #{v}" }
end
...