工具检查链接在红宝石中死亡

时间:2014-02-21 09:54:53

标签: ruby selenium nokogiri

我想用ruby来检查一个链接是否已经死亡。 你能告诉我ruby中的一个工具来检查红宝石中死亡的链接吗? 我可以使用seleniumnokogiri吗? 谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

使用Net::HTTP发出请求并检查状态代码是否为404就足够了。

例如:

require 'net/http'
uri = URI('link_to_check')
response = Net::HTTP.get_response(uri)
if response.code == '404'
  # do something
end

答案 1 :(得分:1)

这是我使用的东西。它执行HEAD而不是GET请求,并将正确地遵循重定向。它还使用通用Net::HTTPSuccess来检查请求是否成功。

require 'net/http'

def alive?(link, limit=10)
  return false if limit <= 0

  link = "http://#{link}" unless link =~ %r{^https?://}i
  uri = URI.parse(link)

  http = Net::HTTP.new(uri.host, uri.port)
  req = Net::HTTP::Head.new(uri.request_uri)
  res = http.request(req)

  case res
    when Net::HTTPSuccess then true
    when Net::HTTPRedirection then alive?(res['location'], limit-1)
    else false
  end
rescue SocketError
  false # unknown hostname
end