Ruby - проверка и обновление URL - PullRequest
0 голосов
/ 24 июня 2010

Я пытался изменить этот метод с перенаправления и возврата содержимого URL-адреса до возврата нового действительного URL-адреса.

После прочтения объекта Net :: HTTP я все еще не уверен, как именно работает метод get_response.Это то, что скачивает страницу?есть ли другой метод, который я мог бы вызвать, который бы просто пинговал URL вместо его загрузки?

require 'net/http'

def validate(url)
    uri = URI.parse(url)
    response = Net::HTTP.get_response(uri)

    case response
    when Net::HTTPSuccess
        return response
    when Net::HTTPRedirection
        return validate(response['location'])
    else
        return nill
    end
end


puts validate('http://somesite.com/somedir/mypage.html')

Ответы [ 2 ]

1 голос
/ 24 июня 2010

Вы правы, что get_response отправляет HTTP-запрос GET на сервер, который запрашивает всю страницу.

Вы хотите использовать запрос HEAD вместо GET. Это запрашивает тот же заголовок ответа HTTP, который получит запрос GET, включая код состояния (200, 404 и т. Д.), Но без загрузки всей страницы.

См. request_head и head методы Net::HTTP. Например

url = URI.parse('http://www.ruby-doc.org/stdlib/libdoc/net/http/rdoc/index.html')
res = Net::HTTP.start(url.host, url.port) {|http|
    http.head(url.path)
}
puts res.class
0 голосов
/ 24 июня 2010

Вы имеете в виду, что, 'ping the url', вы хотите знать, возвращает ли запрос url ответ HTTP 200?

Я не смотрел на реализацию get_response, но я думаю, что это простоотправляет HTTP-запрос GET, судя по всему.

Если вы хотите проверить ответ HTTP 200, я думаю, вы можете просто продолжать выполнять get_response, пока не получите HTTPSuccess && HTTPOK.

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