zundaです

WEBrick::HTTPRequest#queryの動作について。

 --- Hiroyuki Iwatsuki <don / na.rim.or.jp> からのメッセージ:
> 岩月と申します。
> 
> 05/09/27 に zunda<zunda616e / yahoo.co.jp> さんは書きました:
> > BitChannelの内部では、lib/bitchannel/handler.rbでWEBrick::HTTPRequest#query['name']
> > を呼んでリクエストされたページ名を解釈しているようです。下記のdiffにあるように、
> > このメソッドが参照するURLが、ruby-1.8.2では環境変数SCRIPT_NAME、PATH_INFO、
> > QUERY_STRINGをつなぎ合わせて作られていたのに対して、ruby-1.8.3ではREQUEST_URI
> > をもとにして作られているようです。このため、ruby-1.8.3で動くBitChannelはリクエスト
> > されたページ名が得られずに、いつでもFrontPageを表示するようになっています。
> 
> 以下の記事あたりが関係しそうな気がします。
> 
> [ruby-dev:26235] WEBrick::CGI::Socket#request_line and ENV["REQUEST_URI"]
> http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/26235

お知らせいただきありがとうございました。

なるほど。WEBrick::CGI#request_uriにとっては1.8.3の方が期待する動作、という
ことになりますね。一方、WEBrick::HTTPRequest#queryにとっては期待に反する動作
ということになりそうな気がします。

下記のような変更で、WEBrick::HTTPRequest#queryからもWEBrick::CGI#request_uri
からも期待される動作が得られるように思うのですがいかがでしょうか?

diff -ur ruby-1.8.3/lib/webrick.orig/cgi.rb ruby-1.8.3/lib/webrick/cgi.rb
--- ruby-1.8.3/lib/webrick.orig/cgi.rb	2005-09-26 21:23:05.000000000 -1000
+++ ruby-1.8.3/lib/webrick/cgi.rb	2005-09-26 23:49:17.000000000 -1000
@@ -251,6 +251,10 @@
           ret
         end
       end
+
+      def query_string
+        @env["QUERY_STRING"]
+      end
     end
   end 
 end  
diff -ur ruby-1.8.3/lib/webrick.orig/httprequest.rb ruby-1.8.3/lib/webrick/httprequest.rb
--- ruby-1.8.3/lib/webrick.orig/httprequest.rb	2005-07-14 13:00:22.000000000 -1000
+++ ruby-1.8.3/lib/webrick/httprequest.rb	2005-09-26 23:50:18.000000000 -1000
@@ -103,7 +103,7 @@
         @path = HTTPUtils::normalize_path(@path)
         @host = @request_uri.host
         @port = @request_uri.port
-        @query_string = @request_uri.query
+        @query_string = socket.respond_to?(:query_string) ? socket.query_string : @request_uri.query
         @script_name = ""
         @path_info = @path.dup
       rescue



__________________________________
 For All Sports Fans!
 http://pr.mail.yahoo.co.jp/yells/