3

150個までのURLのリストがあります。各ドメインがに解決されるのか、www.domain.comそれとも単にに解決されるのかを確認する必要がありますdomain.com

4

3 に答える 3

5

ドメイン名を別のドメイン名に「解決」または「リダイレクト」する方法は複数あります。

  1. のHTTPリクエストを作成foo.comすると、301のようなHTTPリダイレクト応答コードwww.foo.comで応答し、ブラウザをに送信できます。

    phrogz$ curl -I http://adobe.com
    HTTP/1.1 301 Moved Permanently
    Date: Mon, 30 Apr 2012 22:19:33 GMT
    Server: Apache
    Location: http://www.adobe.com/
    Content-Type: text/html; charset=iso-8859-1
    
  2. サーバーから返送されるWebページには、<meta>リダイレクトが含まれている場合があります。

    <meta http-equiv="refresh" content="0; url=http://www.adobe.com/">
    
  3. サーバーから返送されるWebページには、JavaScriptリダイレクトが含まれている場合があります。

    location.href = 'http://www.adobe.com';
    

これらのうち、テストする必要があるのはどれですか?

HTTP応答ヘッダーの読み取り

#1を検出するには、Rubyに組み込まれているnet/httpライブラリを使用します。

require "net/http"
req = Net::HTTP.new('adobe.com', 80)
response = req.request_head('/')
p response.code, response['Location']
#=> "301"
#=> "http://www.adobe.com/"

HTMLメタヘッダーの読み取り

#2を検出するには、実際にページをフェッチして解析し、内容を確認する必要があります。私はこれにノコギリを使用します:

require 'open-uri' # …if you don't need #1 also, this is easier
html = open('http://adobe.com').read

require 'nokogiri'
doc = Nokogiri.HTML(html)
if meta = doc.at_xpath('//meta[@http-equiv="refresh"]')
  # Might give you "abobe.com" or "www.adobe.com"
  domain = meta['content'][%r{url=([^/"]+(\.[^/"])+)},1]
end

JavaScriptを読む

…あなたはここであなた自身です。:) JavaScriptコードを自分で解析することもできますが、実際にJSを実行して、実際に別のページにリダイレクトされるかどうかを確認する必要があります。

于 2012-04-30T22:23:53.230 に答える
2

私はこれがresolvstdライブラリで非常にうまく行われているのを見てきました。

require 'resolv'
["google.com", "ruby-lang.org"].map do |domain|
  [domain, Resolv.getaddress(domain)]
end
于 2012-04-30T21:21:31.643 に答える
2

機械化する方法:

require 'mechanize'
Mechanize.new.head('http://google.com').uri.host
#=> "www.google.com.ph"
于 2012-05-01T01:42:52.640 に答える