爆弾URL。
http://example-.com
みたいに、ドットの直前にハイフンがあるURL。存在するし、普通にみられる。
だけど!
RFC2396によると、ドメインラベルは英数字で始まって英数字で終わる、ことになってるらしい。
で、さっきみたいなURLは実は不正ってことに。
RubyのURIモジュールは、与えたURIが合ってるかどうかチェックしてくれるんだけど、ここのとこを厳密にチェックしてるらしく、例外を発生させる。
$ irb irb(main):001:0> require 'uri' => true irb(main):002:0> URI('http://example-.com') URI::InvalidURIError: the scheme http does not accept registry part: example-.com (or bad hostname?) from /usr/local/lib/ruby/1.8/uri/generic.rb:194:in `initialize' from /usr/local/lib/ruby/1.8/uri/http.rb:46:in `initialize' from /usr/local/lib/ruby/1.8/uri/common.rb:484:in `parse' from /usr/local/lib/ruby/1.8/uri/common.rb:604:in `URI' from (irb):2 irb(main):003:0>
要するに、さっきみたいなURLはRubyから正攻法では触れない。間違ってるんだから。
でも実在するんだよね。困った。