English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby CGI 프로그래밍

Ruby는 일반적인 언어로, 단순히 WEB 개발에 응용된 언어가 아니며, Ruby는 WEB 애플리케이션 및 WEB 도구 개발에서 가장 일반적으로 사용됩니다。

Ruby를 사용하면 자신의 SMTP 서버, FTP 프로그램, 또는 Ruby 웹 서버를 작성할 뿐만 아니라, Ruby를 사용하여 CGI 프로그래밍을 할 수 있습니다。

그래서, Ruby의 CGI 편집을 배우기 위해 시간을 할애해 보겠습니다。

웹 브라우징

CGI가 어떻게 작동하는지 더 잘 이해하기 위해, 웹 페이지에서 링크나 URL을 클릭하는 과정을 통해 접근할 수 있습니다:

  • 1브라우저를 사용하여 URL에 접속하여 HTTP 웹 서버에 연결합니다。

  • 2브라우저가 서버로부터 요청 정보를 수신하고, 요청한 파일이 서버에 존재하는지 확인하고, 존재하면 파일 내용을 반환하고, 존재하지 않으면 오류 정보를 반환합니다。

  • 3브라우저가 서버에서 정보를 수신하고 수신한 파일이나 오류 정보를 표시합니다。

CGI 프로그램은 Ruby 스크립트, Python 스크립트, PERL 스크립트, SHELL 스크립트, C 또는 C++ 스크립트일 수 있습니다。++ 프로그램 등。

CGI 아키텍처 그래프

웹 서버 지원 및 설정

CGI 프로그래밍을 시작하기 전에, 웹 서버가 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
body>/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://<form method="POST" action="http:/ ,即可用过http://<form method="POST" action="http:/test.cgi 访问该程序,输出结果为: "This is a test."。

浏览器访问该网址后,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中的参数)的数据, 例如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"]

如果表单包含了多个相同名称的字段,则该相同字段的值将保存在数组中。

以下示例中,指定表单中三个相同的字段"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.keys           # => ["name"]

cgi.params         # => {"name"=>["Zara", "Huma", "Nuha"]}주의:

Ruby는 GET과 POST 메서드를 자동으로 판단하므로, 두 메서드에 대해 구분할 필요가 없습니다。

以下是相关的HML代码:
<html>
<body>//<form method="POST" action="http:/www.example.com
test.cgi"> /<input type="submit" value="Submit Data"
First Name :<input type="text" name="FirstName" value="" /<input type="submit" value="Submit Data"
<br /<input type="submit" value="Submit Data" 
Last Name :<input type="text" name="LastName" value="" /<input type="submit" value="Submit Data"
body>/>
body>/form>
body>/<

html>

Form 양식과 HTML 생성 CGI는 HTML을 생성하기 위한 많은 메서드를 포함하고 있으며, 각 HTML 태그에 해당하는 메서드가 있습니다。

이 메서드들을 사용하기 전에, CGI.new를 통해 CGI 객체를 생성해야 합니다。

#!/usr/bin/ruby
태그의 내장이 더 간단하게 만들기 위해 이 메서드들은 내용을 코드 블록으로 처리하며, 코드 블록은 문자열을 태그 내용으로 반환합니다. 다음과 같이 보입니다:
require "cgi"4cgi = CGI.new("html
})
   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
         }
      }
   }
}

문자열 escaping

URL에서의 매개변수나 HTML 양식 데이터를 처리할 때, 지정된 특수 문자를 escaping해야 합니다. 예를 들어: 인용號("), 반좌표(/)。

Ruby CGI 객체는 CGI.escape 및 CGI.unescape 메서드를 제공하여 이러한 특수 문자의 escaping을 처리합니다:

#!/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>')

위 코드의 실행 결과는 다음과 같습니다:

<h1>Zara Ali/A Sweet & Sour Girl</h1>'

CGI 클래스에서 자주 사용되는 메서드

아래는 Ruby에서 완전한 CGI 클래스의 관련 메서드입니다

  • Ruby CGI  - 표준 CGI 라이브러리 관련 메서드

쿠키와 세션