English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ruby - это универсальный язык, не только применяемый для веб-разработки, но и наиболее часто используемый в разработке веб-приложений и веб-инструментов.
Используя Ruby, вы можете не только написать свой SMTP сервер, FTP программу или веб-сервер Ruby, но и использовать Ruby для программирования CGI.
Давайте уделим время изучению редактирования CGI на Ruby.
Чтобы лучше понять, как работает CGI, рассмотрим процесс, начиная с клика по ссылке или URL на веб-странице:
1. Используйте ваш браузер для доступа к URL и подключения к HTTP веб-серверу.
2. После получения запроса информация о URL анализируется веб-сервером, и проверяется, существует ли запрашиваемый файл на сервере. Если файл существует, возвращается его содержимое, в противном случае возвращается сообщение об ошибке.
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 </Directory>
Добавьте суффикс .rb в AddHandler, чтобы можно было доступ к файлам Ruby с расширением .rb:
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://www.example.com/, вы можете получить доступ к программе через http://www.example.com/test.cgi, результатом будет: "This is a test."。
После посещения веб-сервером веб-сайта, находящегося по адресу http://www.example.com/, веб-сервер находит файл test.cgi в каталоге сайта и запускает его через Ruby-пarsing, чтобы открыть документ 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.params # => {"name"=>["Zara", "Huma", "Nuha"]}
Внимание:Ruby автоматически определяет методы GET и POST, поэтому нет необходимости отличать эти два метода.
Вот соответствующий HTML-код:
<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>
Пакет CGI содержит множество методов для создания HTML, у каждого HTML-тега есть соответствующий метод. Прежде чем использовать эти методы, необходимо создать объект CGI с помощью CGI.new.
Для того чтобы упростить nesting тегов, эти методы делают содержимое кодовым блоком, кодовый блок возвращает строку в качестве содержимого тега. Например:
#!/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>')
Результат выполнения кода выше:
<h1>Zara Ali / A Sweet & Sour Girl</h1>'
Вот полные методы класса CGI в Ruby
CGI Ruby - Методы, связанные с стандартной библиотекой CGI
CGI Cookies Ruby - Как обрабатывать куки CGI.
CGI Sessions Ruby - Как обрабатывать сессии CGI.