From: TAKAHASHI Masayoshi Date: 2000-06-09T13:14:23+09:00 Subject: [ruby-list:23130] Re: http.rb will change 高橋征義です。 Wakou Aoyama さん: > ああ、そうですね。ぼけてました。ちょっとまだ問題の根本的な所を把握して > いないのですが、ステータスを返すメソッドを追加して、こんな感じとか? > (何か勘違いしていそうな気も) > > begin > response = http.get() > case response.status > when HTTP_Info > when HTTP_Success > when HTTP_Redirect > end > rescue HTTP_Client_Error > rescue HTTP_Server_Error > end というか、 begin header, data = http.get( u.path ) (成功した場合の処理) rescue Net::ProtoRetriableError (3xxの時の処理) rescue Net::ProtoFatalError (4xxか5xxの時の処理) rescue (HTTP以外が原因のエラーの処理) end という感じです。 > しかし、これならいっそすべて when で行ったほうが良さそうな。 getではなくget2 の場合はそうなります。 気持ちとしては、3xxは再読み込みかあきらめるかを選べれば いいんですけど。 # LWPでは、redirect_ok というメソッドがあるようですが。 そういった感じで、3xxの時の処理をライブラリ内部で勝手に やってくれる前提で、 begin header, data = http.get( u.path ) (成功した場合の処理) rescue Net::ProtoFatalError (HTTP的なエラーの処理) rescue (HTTP以外が原因のエラーの処理) end と書けると気持ち良さそうです。それでも人によって例外を 使うべきかどうかの判断は揺れそうですけど。 # やはりLWR(?)を書くか、いっそのことなひさんが以前言っていた # 「厚いライブラリ」を書くかするべきなんでしょうけど……。 高橋征義 (TAKAHASHI Masayoshi) Email:maki@inac.co.jp