Ruby初心者スレッドPart7

このエントリーをはてなブックマークに追加
586デフォルトの名無しさん
環境:ruby 1.8.4 (2005-12-24) [i386-mswin32]
WEBrick使ってるんですけど、特定のホストで例外が起きます。
調べてみると、ホスト名の認識がまずいようで、

URI::parse('http://shacho_soft.at.infoseek.co.jp/diablo_calc/calc.html')

上記のホストで、ホスト名にアンダースコアが含まれてるために host ではなくて registry が設定されてしまい
InvalidURIErro例外が発生します。WEBrick的には HTTPStatus::BadRequest です。

uri/common.rb の↓の部分でアンダースコアが含まれてないから、上手くいかないんだと思うんですけど

DOMLABEL = "(?:[#{ALNUM}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
TOPLABEL = "(?:[#{ALPHA}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
HOSTNAME = "(?:#{DOMLABEL}\\.)*#{TOPLABEL}\\.?"

こういうのって、きっちりRFCにしたがってるんだと思いますが
どうにかして上手く回避する方法はないでしょうか?

たぶん、アンダースコアを含めれば上手くいくんでしょうけど、
この手の問題って、過去に問題になってる気がするので、賢い方法があったら教えてください
587572:2006/09/05(火) 12:22:00
すみません、Ruby1.9の削除について質問した者です。本日、社の者に問い合
わせたところ、1.8はソースではなくRedHat提供のRPM(バイナリ)パッケージ
からインストールしたということでした。

>>576氏の
>1.8もソースからインストールしていたということだな。
という言葉と矛盾してしまい、少々当惑しております。もしかしたら、他の方
法で1.8をインストールしようとした人がいたのかも知れません。

ということで、追加で質問させていただきたいのですが、

RedHat提供のRPM(バイナリ)パッケージでRuby1.8を再インストールしようと
思っているのですが、>>576で教えていただいた手順の実行後、RPMのインストー
ルをすればよいのでしょうか?

何度もすみませんが、よろしくお願いします。
588デフォルトの名無しさん:2006/09/05(火) 12:58:45
>>586
俺もいつも困ってるんだが、なんかうまい方法ないかねえ。
589デフォルトの名無しさん:2006/09/05(火) 13:10:33
>>588
本スレにぶん投げるといいことあるかも
590デフォルトの名無しさん:2006/09/05(火) 13:27:47
>>586
関連しそうなRFC1738, 2396, 2616を眺めてみたけどアンダースコアは使えるよ。
というかそれ全然RFCに従ってないと思う、WEBrick使って無いんで知らないけど
ttp://ja.wikipedia.org/wiki/%E3%83%AB%E3%83%93%E3%83%BC
とかも失敗しない?
591デフォルトの名無しさん:2006/09/05(火) 13:37:09
>>586
ホスト名
592デフォルトの名無しさん:2006/09/05(火) 13:54:36
>>590
さすがに ttp:// に対応してるわけはなかろう。
593デフォルトの名無しさん:2006/09/05(火) 13:57:39
>>586
漏れは、アンダースコアを含んだパターンも解釈するように URL::parse を修正して使ってる。
594デフォルトの名無しさん:2006/09/05(火) 14:14:08
>>592
あ、ごめん癖でh抜いちゃったけど要はURLエスケープした文字列含んでるとって事。
595デフォルトの名無しさん:2006/09/05(火) 14:23:21
>>594
URL エスケープしててもいけるよん。試してみた?
596デフォルトの名無しさん:2006/09/05(火) 15:08:40
話を理解してない奴が一人いるっぽいのはおいといて、
URI::parseの制限をゆるくするオプションかなんかは欲しい。
WEBrickでproxy作ったりするとかなり迷惑する。
597デフォルトの名無しさん:2006/09/05(火) 16:01:20
どこをどの程度緩くするかって利用のケースによって変わってきそうなので、
オプションで指定といっても難しそうな気はするね。

uri = URI::Parser::new(:host=>host_pattern, :path=>path_pattern, :fragment=>fragment_pattern).parse(url)
みたいにカスタマイズできると良いのかなあ?