Ruby CGIプログラミング


Ruby は WEB 開発に使用される言語だけではなく、汎用言語です。WEB アプリケーションや WEB ツールの開発では Ruby が最も一般的です。

Ruby を使用すると、独自の SMTP サーバー、FTP プログラム、または Ruby Web サーバーを作成できるだけでなく、CGI プログラミングにも Ruby を使用できます。

次に、Ruby の CGI 編集について少し学んでみましょう。


Web ブラウズ

CGI の仕組みをよりよく理解するには、Web ページ上のリンクまたは URL をクリックするプロセスから始めます。

  • 1. ブラウザを使用して URL にアクセスし、HTTP Web に接続します。サーバ。

  • 2. リクエスト情報を受信した後、Web サーバーは URL を解析し、アクセスされたファイルがサーバー上に存在するかどうかを確認します。ファイルが存在する場合は、ファイルの内容を返します。存在しない場合は、エラー メッセージが返されます。 。

  • 3. ブラウザはサーバーから情報を受信し、受信したファイルやエラーメッセージを表示します。

CGI プログラムは、Ruby スクリプト、Python スクリプト、PERL スクリプト、SHELL スクリプト、C または C++ プログラムなどです。


CGI アーキテクチャ図

cgiarch1.gif


Web サーバーのサポートと構成

CGI プログラミングを実行する前に、Web サーバーが CGI をサポートし、CGI ハンドラーが構成されていることを確認してください。

Apache は CGI 構成をサポートします:

CGI ディレクトリをセットアップします:

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

すべての HTTP サーバー実行 CGI プログラムは、事前に構成されたディレクトリに保存されます。このディレクトリは CGI ディレクトリと呼ばれ、慣例により /var/www/cgi-bin という名前が付けられます。

CGI ファイルの拡張子は .cgi ですが、Ruby では拡張子 .rb も使用できます。

デフォルトでは、Linux サーバーが実行するように設定されている cgi-bin ディレクトリは /var/www です。

CGI スクリプトを実行するために他のディレクトリを指定したい場合は、httpd.conf 設定ファイルを次のように変更できます:

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options +ExecCGI
   Order allow,deny
   Allow from all
</Directory>

AddHandler に .rb サフィックスを追加して、.rb で終わる Ruby スクリプト ファイルにアクセスできるようにします:

AddHandler cgi-script .cgi .pl .rb

CGI スクリプトの作成

最も基本的な Ruby CGI コードは次のとおりです:

#!/usr/bin/ruby

puts "Content-type: text/html\n\n"
puts "<html><body>This is a test</body></html>"

このコードを test.cgi ファイルに保存し、最後にサーバーにアクセスして、CGI スクリプトとして実行するための十分な権限を与えることができます。 。

サイトのアドレスが http://www.example.com/ の場合、http://www.example.com/test.cgi を使用してプログラムにアクセスできます。出力結果は次のようになります。テスト。 "。

ブラウザが URL にアクセスすると、Web サーバーはサイト ディレクトリで test.cgi ファイルを見つけ、Ruby パーサーを使用してスクリプト コードを解析し、HTML ドキュメントにアクセスします。


cgi.rbを使用する

RubyはCGIライブラリを呼び出して、より複雑なCGIスクリプトを書くことができます。

次のコードは、CGI ライブラリを呼び出して、スクリプトの CGI スクリプトを作成します。

#!/usr/bin/ruby

require 'cgi'

cgi = CGI.new
puts cgi.header
puts "<html><body>This is a test</body></html>"

以下のコードでは、CGI オブジェクトが作成され、ヘッダー情報が出力されます。


フォーム処理

CGI ライブラリを使用して、フォーム送信 (または URL 内のパラメーター) からデータを取得するには 2 つの方法があります。 たとえば、URL:/cgi-bin/test.cgi?FirstName=Zara&LastName=Ali です。

CGI#[] を使用してパラメータ FirstName と LastName を直接取得できます:

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi['FirstName'] # =>  ["Zara"]
cgi['LastName']  # =>  ["Ali"]

フォーム データを取得する別の方法:

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
h = cgi.params  # =>  {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h['FirstName']  # =>  ["Zara"]
h['LastName']   # =>  ["Ali"]

次のコードはすべてのキー値を取得するために使用されます:

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi.keys         # =>  ["FirstName", "LastName"]

フォームに複数のフィールドが含まれる場合同じ名前で、同じフィールドの値が配列に保存されます。

次の例では、3 つの同一のフィールド「name」がフォームに指定されており、それぞれ「Zara」、「Huma」、「Nuha」の値が指定されています:

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi['name']        # => "Zara"
cgi.params['name'] # => ["Zara", "Huma", "Nuha"]
cgi.keys           # => ["name"]
cgi.params         # => {"name"=>["Zara", "Huma", "Nuha"]}

注: Ruby は GET を自動的に決定します。と POST メソッドがあるため、2 つのメソッドを区別する必要はありません。

以下は関連する HML コードです:

<html>
<body>
<form method="POST" action="http://www.example.com/test.cgi">
First Name :<input type="text" name="FirstName" value="" />
<br />
Last Name :<input type="text" name="LastName" value="" /> 

<input type="submit" value="Submit Data" />
</form>
</body>
</html>

フォームフォームと HTML の作成

CGI には HTML を作成するための多数のメソッドが含まれており、各 HTML タグには対応するメソッドがあります。 これらのメソッドを使用する前に、CGI.new を介して CGI オブジェクトを作成する必要があります。

タグのネストを容易にするために、これらのメソッドはコンテンツをコード ブロックとして使用し、コード ブロックはタグのコンテンツとして文字列を返します。以下に示すように:

#!/usr/bin/ruby

require "cgi"
cgi = CGI.new("html4")
cgi.out{
   cgi.html{
      cgi.head{ "\n"+cgi.title{"This Is a Test"} } +
      cgi.body{ "\n"+
         cgi.form{"\n"+
            cgi.hr +
            cgi.h1 { "A Form: " } + "\n"+
            cgi.textarea("get_text") +"\n"+
            cgi.br +
            cgi.submit
         }
      }
   }
}

文字列エスケープ

URL または HTML フォーム データのパラメーターを処理する場合、引用符 (")、バックスラッシュ (/) などの指定された特殊文字をエスケープする必要があります。 Ruby CGI オブジェクトは、これらの特殊文字のエスケープを処理する CGI.escape および CGI.unescape メソッドを提供します:

#!/usr/bin/ruby

require 'cgi'
puts CGI.escape(Zara Ali/A Sweet & Sour Girl")

上記のコードの実行結果は次のとおりです:

#!/usr/bin/ruby

require 'cgi'
puts CGI.escape(Zara Ali/A Sweet & Sour Girl")

別の例のセット:

#!/usr/bin/ruby

require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')

実行結果r Ruby-Standard CGI Library の完全な CGI クラスの CGI CGI の共通メソッド 関連メソッド


Cookie および SESSIONS

    RUBY CGI Cookies - CGI Cookie の処理方法.
  • Ruby CGI セッション - CGI セッションの処理方法。