2009-12-01 4 views
0

URL이 있는지 확인하려고합니다.(레일즈) URL 유효성 확인에 이상한 문제가 있습니다.

validate :registered_domain_name_exists 

private 

def registered_domain_name_exists 
    if url and url.match(URI::regexp(%w(http https))) then 
    begin # check header response 
     case Net::HTTP.get_response(URI.parse(url)) 
     when Net::HTTPSuccess then true 
     else errors.add(:url, "URL does not exist") and false 
     end 
    rescue # DNS failures 
     errors.add(:url, "URL does not exist") and false 
    end 
    end 
end 

그러나,이 코드는 실패 : 여기 이렇게 내 코드입니다. http://www.biorad.com은 (는) 유효한 웹 사이트가 아닙니다. 이것은 절대적으로 올바르지 않습니다. 또한 http://www.biorad.comhttp://www.bio-rad.com/evportal/evolutionPortal.portal으로 리디렉션되었음을 알면이 URL도 시도했지만 실패했습니다. 다시, 나는 이것이 가능할 수 없다는 것을 안다. 내 코드에 무슨 문제가 있습니까?

답변

0

당신이 준 예제 URL은 리디렉션 (http 상태 코드 301 또는 302)입니다. 귀하의 코드는 http 상태 코드 2xx 만 성공으로 간주합니다. 다른 사례 추가 :

when Net::HTTPRedirection then true 

업데이트 : GET 대신 HTTP HEAD를 사용하면 네트워크를 통해 전송되는 데이터가 줄어 듭니다.

uri = URI.parse(url) 
response = Net::HTTP.start(uri.host, uri.port) {|http| 
    http.head('/') 
} 
관련 문제