どうも、松崎です。
自分でもすっかり忘れておりました。
すみません。

At Thu, 2 Jun 2005 09:28:06 +0900,
Takahiro Kambe wrote:
> > まあ、明らかにスクリプトの方が仕様外なので仕方ないのです
> > (そして連絡しても直してもらえないのです)が、
> > 例外を拾っても救済する方法がわかりませんでした。
> HTTPとしての仕様を満たしていない以上、例外を拾って救済するのはエラー処
> 理をする以上のことはできないわけです。エラーとせずにデータを受け取りた
> いなら、http.rbで定義されている内容を元に修正が必要になると思います。

はい、というわけで、
下のように raise HTTPBadResponse を削って
内容を受け取るようにしました。
これだと response の最初2行が闇へ消えてしまうのですが、
今回は HTML 構文解析をするわけではないのでよしとしました。


class << Net::HTTPResponse
  def read_status_line(sock)
    str = sock.readline
    m = /\AHTTP(?:\/(\d+\.\d+))?\s+(\d\d\d)\s*(.*)\z/in.match(str)
    m ? m.to_a[1,3] : ['', '', '']
  end

  def each_response_header(sock)
    while true
      line = sock.readuntil("\n", true).sub(/\s+\z/, '')
      break if line.empty?
      m = /\A([^:]+):\s*/.match(line) or break
      yield m[1], m.post_match
    end
  end
end


-- 
Motomichi Matsuzaki, PhD <mzaki / biol.s.u-tokyo.ac.jp>
Dept. of Biological Sciences, Grad. School of Science, Univ. of Tokyo, Japan