2012-01-25 9 views
0

Rubyを使用してCGIを生成しています(レール上ではありません)。Rubyが現在のURIの引数を解析しています

コマンドライン引数の場合と同じ方法で、ローカルで実行されているスクリプトの引数を解析したい(localhost:3000/apage.cgi?key=valueのような要求で)。ARGV[0]

私が試してみると:params = CGI.parse(request.query_string)、私は ``未定義のローカル変数またはメソッド要求 ''を取得します。

編集:コードは次のとおりです。だからこそ私はそれを最初に入れなかったのです。

#!/usr/bin/env ruby 
require 'cgi' 
print "Content-type: text/plain\n\n" 
#print CGI.parse(URI.parse(request.fullpath).query) 
+1

完全なコードを教えてください。一見すると、あなたのコードで定義されていない 'request'メソッドまたは変数を使用しています。 – DNNX

+0

正確には、これにアクセスするためにどのモジュールが必要ですか? (または単に純粋なルビーで現在のベースURLを取得しますか?)この時点で、私は現在のスクリプトに送られたパラメータを出力しようとしています。 –

+0

はコードを追加しました... –

答えて

1

あなたはスクリプトですが、実際にはこのコードにrequestがありません。それは、代わりにCGIのFCGIを使用することをお勧めします、ここでは一例です:

#!/usr/bin/env ruby 

require 'fcgi' 
require 'rack' 


# this class made fcgi env compatible with rack 
class Rack::PathInfoRewriter 
    def initialize 
    end 

    def call(env) 
    # here you can place initialization of you app 
    request = Rack::Request.new env 

    # here is params. You can also find all info about request in this object 
    request.params 

    # you app should return result in such format 
    [200, "Content-type: text/plain", ['html']] 
    end 
end 

Rack::Handler::FastCGI.run Rack::PathInfoRewriter.new 
0

CGIインターフェイスをサポートするWebサーバーがあるとします。テキストはあなたの要求のクエリを含むと

require 'cgi' 

cgi = CGI.new 
cgi.out{ ENV['REQUEST_URI'] } 

この意志の応答:

は、このスクリプトを試してみてください。

0

私はRubyのビルトインURIモジュール、またはAddressable宝石のいずれかを使用するURLを解析する必要がある場合。 URIを使用して

、あなたが正しい動作を取得するためのプロトコルを追加する必要があります:

URI.parse('http://' + 'localhost:3000/apage.cgi?key=value').query # => "key=value" 

あなたはもう少しマッサージと値のハッシュを作成することができます。

Hash[URI.parse('http://localhost:3000/apage.cgi?key=value').query.split('&').map{ |q| q.split('=') }] 
{ 
    "key" => "value" 
} 

Hash[URI.parse('http://localhost:3000/apage.cgi?key=value&foo=bar').query.split('&').map{ |q| q.split('=') }] 
{ 
    "key" => "value", 
    "foo" => "bar" 
} 

同様に、Addressableを使用して:

require "addressable/uri" # => true 
uri = Addressable::URI.parse('http://' + 'localhost:3000/apage.cgi?key=value') 
#<Addressable::URI:0x100c80978 
    @uri_string = nil, 
    @validation_deferred = false, 
    attr_accessor :authority = nil, 
    attr_accessor :host = "localhost", 
    attr_accessor :path = "/apage.cgi", 
    attr_accessor :port = 3000, 
    attr_accessor :query = "key=value", 
    attr_accessor :scheme = "http", 
    attr_reader :hash = nil, 
    attr_reader :normalized_host = nil, 
    attr_reader :normalized_path = nil, 
    attr_reader :normalized_port = nil, 
    attr_reader :normalized_query = nil, 
    attr_reader :normalized_scheme = nil 
> 
uri.query # => "key=value" 
uri.query_values # => {"key" => "value"} 
関連する問題