Проверка доступности URL Ruby on Rails - PullRequest
0 голосов
/ 23 августа 2011

Предположим, что после простой проверки отправленного пользователем URL-адреса у меня есть строка, похожая на URL-адрес:

url = 'http://www.thisdomaindoesntexist.com/dont_even_ask_about/this/uri'

Как я могу проверить, доступен ли он или нет?

Я пробовал это вмоя функция is_valid_link:

require "net/http"
url = URI.parse(url)
req = Net::HTTP.new(url.host, url.port)
res = req.request_head(url.path)

Это работает, если сервер существует, возвращая мне HTTP-ответ, но проблема в том, что в случае неправильного URL я получаю ошибку, подобную этой:

SocketError in PostsController#create

getaddrinfo: nodename nor servname provided, or not known

Как мне правильно выполнить такую ​​проверку?

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 23 августа 2011

Вы можете использовать rescue для перехвата ошибок и некоторой обработки ошибок

begin
  require "net/http"
  url = URI.parse(url)
  req = Net::HTTP.new(url.host, url.port)
  res = req.request_head(url.path)
rescue
  # error occured, return false
  false
else
  # valid site
  true
end

Используйте rescue inline:

require "net/http"
url = URI.parse(url)
req = Net::HTTP.new(url.host, url.port)
res = req.request_head(url.path) rescue false
0 голосов
/ 20 марта 2014

Я искал способ проверить, существует ли URL в течение 5 часов, и эта ветка действительно помогла мне. Я новичок в рельсах и хотел найти что-нибудь лёгкое.

Вот как я интегрировал код в контроллер:

require "net/http"
def url
url = URI.parse('http://www.url that you want to check.com/' + "/")
end
def req
@req = Net::HTTP.new(url.host, url.port)
end
def res #res
@res = req.request_head(url.path) 
rescue
    false
end

def test
    if res == false
    "something"
    else
    "another thing"
end

Вы должны убедиться, что URL заканчивается символом "/", иначе код не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...