루비 CGI 프로그래밍


Ruby는 WEB 개발에만 사용되는 언어가 아닌 보편적인 언어이지만, WEB 애플리케이션 및 WEB 도구 개발에 가장 일반적으로 사용되는 언어입니다.

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

다음으로 루비의 CGI 편집에 대해 잠시 배워보겠습니다.


웹 탐색

CGI 작동 방식을 더 잘 이해하려면 웹 페이지에서 링크나 URL을 클릭하는 과정부터 시작해 보세요.

  • 1. 브라우저를 사용하여 URL에 액세스하고 HTTP 웹에 연결하세요. 섬기는 사람.

  • 2. 웹 서버는 요청 정보를 받은 후 URL을 구문 분석하여 해당 파일이 서버에 존재하는지 확인하고, 파일이 존재하면 해당 파일의 내용을 반환합니다. 그렇지 않으면 오류 메시지가 반환됩니다.

  • 3. 브라우저는 서버로부터 정보를 받아 수신된 파일이나 오류 메시지를 표시합니다.

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


CGI 아키텍처 다이어그램

cgiarch1.gif


웹 서버 지원 및 구성

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
</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에 액세스한 후 웹 서버는 사이트 디렉터리에서 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.params         # => {"name"=>["Zara", "Huma", "Nuha"]}

참고: Ruby는 GET을 자동으로 결정합니다. 및 POST 방법을 사용하므로 두 방법을 구별할 필요가 없습니다.

다음은 관련 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
         }
      }
   }
}

String escape

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 표준 CGI 라이브러리의 전체 CGI 클래스에 있는 CGI CGI의 일반적인 메서드 관련 메서드


Cookies and SESSIONS

  • RUBY CGI 쿠키 - CGI 쿠키 처리 방법 .


Ruby CGI 세션 - CGI 세션 처리 방법.