English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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 처리기를 설정했는지 확인하십시오。
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
가장 기본적인 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文档。
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>/<
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 } } } }
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>'
아래는 Ruby에서 완전한 CGI 클래스의 관련 메서드입니다
Ruby CGI - 표준 CGI 라이브러리 관련 메서드
Ruby CGI 쿠키 - CGI 쿠키를 처리하는 방법.
Ruby CGI 세션 - CGI 세션을 처리하는 방법.