0

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は有効な Web サイトではないと表示されます。これは絶対に間違っています。また、 http : //www.biorad.com があなたを http://www.bio-rad.com/evportal/evolutionPortal.portal にリダイレクトすることを知っている私もこの URL を試しましたが、それも失敗しました。繰り返しますが、これが不可能であることはわかっています。私のコードの何が問題なのですか??

4

1 に答える 1

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('/')
}
于 2009-12-02T12:31:54.850 に答える