2010-11-30 17 views
0

奇妙な質問のビット。 WebサーバーにHTMLだけでなくヘッダーだけを返すように依頼する方法はありますか?HTMLなしでURLヘッダーを取得

サーバーにURLを問い合わせて、有効な(404/500/etcではない)かどうかを確認し、リダイレクト(存在する場合)に従いますが、実際のHTMLコンテンツは取得しません。好ましくは

おかげ

  • ルビー

答えて

1

これはHEAD HTTPメソッドはまったく同じものです。..ネット:: HTTPライブラリを確認し、提案しました。

Rubyの場合、低レベルのnet/httpよりもはるかに簡単で、あなたがHEADリクエストを実行することができる、美しい宝石があります。

gem install rest-open-uri 

その後、

 
irb> require 'rubygems' 
=> true 
irb> require 'rest-open-uri' 
=> true 
irb> sio = open("http://stackoverflow.com", :method => :head) 
=> # 
irb> sio.meta 
=> {"expires"=>"Tue, 30 Nov 2010 18:08:47 GMT", "last-modified"=>"Tue, 30 Nov 2010 18:07:47 GMT", "content-type"=>"text/html; charset=utf-8", "date"=>"Tue, 30 Nov 2010 18:08:27 GMT", "content-length"=>"193779", "cache-control"=>"public, max-age=18", "vary"=>"*"} 
irb> sio.status 
=> ["200", "OK"] 

それはリダイレクトに従います。ホストが存在しない場合はSocketError、ファイルが存在しない場合はOpenURI :: HTTPErrorをレスキューする必要があります。

もっと強力なものをお望みなら、MechanizeまたはHTTPartyをご覧ください。

0

使用Rubyのネット/ httpとでこれを行う方法Makが言及したHEADメソッド。情報のコマンドラインからri Net::HTTP#headを確認してください。

2

としては

require 'net/http' 
Net::HTTP.new('www.twitter.com').request_head('/').class 
+0

これはしばらくレスリングされています。これは今まで見た中で最もクリーンな答えです – dabobert

0

実際、私はパンツリスの答えを自分のものにする必要がありました。 2種類のURLがあるように思えますが、fnは単独で働いていました。

module URI 

    def self.online?(uri) 
    URI.exists?(uri) 
    end 

    def self.exists?(uri) 
    URI.exists_ver1?(uri) 
    end 

    def self.exists_ver1?(url) 
    @url = url 
    ["http://", "https://"].each do |prefix| 
     url = url.gsub(prefix, "") 
    end 

    begin 
     code = Net::HTTP.new(url).request_head('/').code 
     [2,3].include?(code.to_i/100) 
    rescue 
     URI.exists_ver2?(@url) 
    end 
    end 


    def self.exists_ver2?(url) 
    url = "http://#{url}" if URI.parse(url).scheme.nil? 
    return false unless URI.is_a?(url) 
    uri = URI(url) 
    begin 
     request = Net::HTTP.new uri.host 
     response= request.request_head uri.path 
     #http status code 200s and 300s are ok, everything else is an error 
     [2,3].include? response.code.to_i/100 
    rescue 
     false 
    end 
    end 
end 
関連する問題