どうも、全部初心者のかっぱ@inokara)です。さらに久々の投稿です。

はじめに

前回は PHP でやってみたので Ruby でも同じことが出来ないか調べました。レスポンスヘッダはローカルホスト上の Ruby スクリプトを使って確認しましたが、リクエストヘッダはフランク Sinatra を使ってやってみました。


準備

試した環境

  • MacOS X 10.9 Marvericks
  • ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13]

レスポンスヘッダを確認するスクリプト

ドキュメントルートに以下のような Ruby スクリプトを作成します。

hoge.rb
#!/usr/bin/ruby

require 'net/http'

http = Net::HTTP.new('hogehuga.inokara.com')

response = http.head("/")

response.each do |name,value|
  puts name + " : " + value + "n"
end

上記の処理の流れとしては…

  • Net::HTTP の特異メソッドである new メソッドの引数に ‘hogehuga.inokara.com’ というリクエストの URL の引数を与えてオブジェクトを生成
  • 生成されたオブジェクトのメソッド head の引数として ‘/’ をつけてヘッダを取得
  • 取得したヘッダは hash で入っているので each_pair(ま each)でヘッダ名と値を順次取り出している

というのが以下の結果。

x-amz-id-2 : cnG6aJJ5AnLdxPrhAK2+KrG8+crYJ6g08oUd7bgx93ANwZfgdum13xtZs8MeDQdL
x-amz-request-id : 086F9E32F059C0E6
date : Fri, 25 Jul 2014 22:19:16 GMT
x-amz-meta-content-md5 : d4c4e30803070740640299d08a1ceb07
last-modified : Thu, 29 May 2014 23:29:21 GMT
etag : "d4c4e30803070740640299d08a1ceb07"
content-type : text/html
content-length : 21385
server : AmazonS3

なるほど hogehuga.inokara.com は実は S3 でホストされていたんですな…みたいなことが解ったりするわけです。

ぢゃあ、リクエストヘッダは?

リクエストヘッダを確認するには Sinatra 使って簡単な Web サーバーを立ち上げて確認するのがお手軽そうです。例えば Amazon Linux の場合には既に Ruby がインストールされていますので以下のように Sinatra を Gem でインストールします。

gem install sinatra --no-ri --no-rdoc -V

インストールが終わったら適当なディレクトリで以下のようなスクリプトを作ります。

req_header.rb
require'sinatra'

get '/req_header' do
  http_headers = request.env.select { |k, v| k.start_with?('HTTP_')}
  p "#{http_headers}"
end

スクリプトはこちらを参考にさせて頂きました。有難うございます!

Sinatra 起動

スクリプトを作ったら以下のように Sinatra を起動します。

ruby -rubygems web-test.rb -o 0.0.0.0 -p 1919 &

-o でホスト名、-p でポート名を指定します。以下、ヘルプ表示です。

Usage: web-test [options]
    -p port                          set the port (default is 4567)
    -o addr                          set the host (default is localhost)
    -e env                           set the environment (default is development)
    -s server                        specify rack server/handler (default is thin)
    -x                               turn on the mutex lock (default is off)

アクセスしてみます

curl で…
curl "http://${HOST}:1919/"

以下のような結果が返ってきます。

{"HTTP_USER_AGENT"=>"curl/7.30.0", "HTTP_HOST"=>"${HOST}:1919", "HTTP_ACCEPT"=>"*/*", "HTTP_VERSION"=>"HTTP/1.1"}

おお、良い感じ。

ブラウザで…

01

おお、いいっすねえ。

ちなみに…

Sinatra の場合、request というメソッドを使えば以下のようにさらに簡単にヘッダの情報を取得出来ます。

hoge.rb
get '/hoge' do
  request.ip # 接続元の IP
  request.user_agent # 接続元の IP
end

詳しくはこちらを御覧ください。


意外に…

Ruby でもお手軽にレスポンスヘッダやリクエストヘッダを取得することが出来ました。

元記事は、こちら