トップ «前の日記(2009-04-04) 最新 次の日記(2009-04-06)» 編集

2009-04-05 [長年日記]

_ 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 が便利

Tags: Web Ruby

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

*2 自分を含めて

本日のツッコミ(全2件) [ツッコミを入れる]
_ noplans (2009-04-24 11:08)

require 'open-uri'<br>uri = URI.parse('http://aligach.net/diary/')<br>uri.read.meta<br><br>……という話ではない?

_ wtnabe (2009-04-24 11:18)

うお。取れますね。meta って body の方の meta data かと思ってました。なるほどー。これなら全然イケるなぁ。