RestClient は 0.9 でヘッダが取れるようになってた

RestClient を散々持ち上げておきながら、最近ページの内容がほしい場合には open-uri をよく使っていました1。でも、いろんな方が2思っていながらなんとなく放置気味になっているキャッシュがやはり欲しいなぁと思ったときには open-uri だと困ります。ヘッダがほとんど取れないので。([2009-04-24追記] 嘘でした。URI().read.meta で取れました。)でもそのためだけに Mechanize はちょっとイヤなのです。そんなに機能要らないし。

どうしようと思っていたんですが、灯台下暗し。RestClient が 0.9 からヘッダ取れるようになってました。

rest-client 0.8.2 の場合

irb(main):001:0> gem 'rest-client', '< 0.9'
=> true
irb(main):002:0> require 'rest_client'
=> true
irb(main):003:0> r = RestClient.get( 'http://aligach.net/diary/' )
=> ...
irb(main):004:0> r.methods.grep( /headers/ )
=> []

rest-client 0.9.2 の場合、

irb(main):001:0> gem 'rest-client', '>= 0.9'
=> true
irb(main):002:0> require 'restclient'
=> true
irb(main):003:0> r = RestClient.get( 'http://aligach.net/diary/' )
=> ...
irb(main):004:0> r.methods.grep( /headers/ )
=> ["headers"]
irb(main):005:0> r.headers
=> {:cache_control=>"no-cache", :vary=>"User-Agent",
    :last_modified=>"Sun, 05 Apr 2009 00:33:07 GMT",
    :server=>"Apache/1.3.39 (Unix)", :x_pad=>"avoid browser bug",
    :content_length=>"30246", :content_type=>"text/html; charset=EUC-JP",
    :pragma=>"no-cache", :date=>"Mon, 06 Apr 2009 00:37:43 GMT"}

適当に整形してしまいましたが、要は headers というメソッドでヘッダの内容が Hash として取れます。うむ。便利になった。ちなみにリリースノートは

RubyForge: Rest Client: リリースノート

あ。require 'restclient' でイケるようになってる。まぁどっちみち gem の名前と合ってないんだけど;;

ところで今まであまり気にしていなかったのですが、RestClient.get の結果って、RestClient::Response オブジェクトなんですけど、これ、

irb(main):006:0> r.is_a? String
=> true

String なんですね。なるほど、それで irb 上でいきなり内容を確認できるのか。ってほんとにイマサラなわけですが。

cf.

rest-client が便利

  1. まぁ内容が欲しいんだから間違ってないんですが。 

  2. 自分を含めて 

More