あおきです。
遅くなりました。

  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
というように、直感的な名前で振り分けできるのでずっと便利です。
-------------------------------------------------------------------
青木峰郎