あおきです。
遅くなりました。
In mail "[ruby-list:37064] Net::ProtoServerError"
j.meguro / ntt.com wrote:
> めぐろと申します。
>
> Net::HTTPを使っていて、InternalServerError(500)から
> Net::ProtoServerErrorを受け取りたかったのですが、
> Net::ProtoFatalErrorを受け取ってしまいます。
>
> これは正しい動作なのでしょうか?
Ruby 1.6 だと FatalError、1.8 だと ServerError が出ますね。
どっちが正しいんだったかな。直感的には ServerError が正しそう
ですが、経緯を考えると逆かもしれません。それを忘れて後で変えた
可能性が高いです。
が、しかし、いまさら直しても 1.6 の続きはリリースされるかどうか
わからないですし、1.8 の net/http ではそもそも例外が出なくなって
いますから、1.6 の現状に合わせようと思います。つまり 1.6 / 1.8 とも
4xx → Net::ProtoServerError
5xx → Net::ProtoFatalError
を正式な仕様と決めます。全く直感的ではないですが我慢してください。
また最も幸せな解決方法は、Ruby 1.6 であっても
require 'net/http'
Net::HTTP.version_1_2
として、新しい仕様で使ってもらうことです。そうすると例外が
出ませんので、このへんのウザい仕様に惑わされずに済みます。
また Internal Server Error に対しては Net::HTTPInternalServerError
というように、直感的な名前で振り分けできるのでずっと便利です。
-------------------------------------------------------------------
青木峰郎