「 2015年01月 」一覧

RubyのhttpclientでUser-AgentにGemのバージョン情報を入れない方法

Rubyのgemのhttpclientを使うと、Webサイトのスクレイピングなどが簡単に作れます。

以下のようにすることで、リクエスト送信時のUser-Agentも設定できます。

hc = HTTPClient.new('','XXXX')

ただし、これだと実際のHTTPリクエストのUser-Agentには、以下のようにパッケージとRubyのバージョンが追加されてしまいます。

User-Agent: XXXX (2.5.3.2, ruby 2.0.0 (2014-05-08))

これはsessin.rbに以下の様に書かれているためです。

def set_header(req)
  if @requested_version
    if /^(?:HTTP\/|)(\d+.\d+)$/ =~ @requested_version
      req.http_version = $1
    end
  end
  if @agent_name && req.header.get('User-Agent').empty?
    req.header.set('User-Agent', "#{@agent_name} #{LIB_NAME}")
  end

これを防ぎ、期待したUser-Agentだけを記録するには、以下のように default_header 引数として、User-Agentをハッシュで渡します。

hc = HTTPClient.new(default_header: {"User-Agent" => "XXXX"})

こうすることで、期待した文字列のみをUser-Agentとして設定できます。

User-Agent: XXXX


ServersManにrbenvでRubyをインストールする

サーバをさくらレンタルサーバからServersManのVPSに引っ越しました。
VPSということで、必要最低限のソフトしか入っていません。

Rubyを入れるにあたり、rootでグローバルに入れるのではなく、一般ユーザでrbenvで入れることにしました。

環境はCentOS7です。

$ uname -r
2.6.32-042stab092.2
$ cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)

rbenvはgitでcloneするので、まずはgit自体をインストールします。
ついでにyumもアップデート。

$ sudo yum update
$ sudo yum install git

そして、rbenvをcloneしてパスを設定します。

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘ >> ~/.bash_profile
$ echo ‘eval “$(rbenv init -)”‘ >> ~/.bash_profile
$ exec $SHELL -l
$ rbenv -v
rbenv 0.4.0-129-g7e0e85b

続いて、ruby-build をcloneします。

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

ビルドに必要なgccとopenssl-devlを入れます

$ yum install gcc openssl-devel

そして、インストール可能なバージョンから最新版を確認し、バージョンを指定してインストールします。

$ rbenv install –list
Available versions:
1.8.6-p383
1.8.6-p420
(略)
2.1.4
2.1.5 <- 最新版 $ rbenv install -v 2.1.5

再読み込みします。

$ rbenv rehash
$ rbenv versions
2.1.5

環境全体でのバージョンを指定。

$ rbenv global 2.1.5
$ rbenv global
2.1.5

動作確認。

$ ruby -v
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]

以上で完了です。