Учебники

Ruby Web Applications — CGI-программирование

Ruby — язык общего назначения; его нельзя назвать веб-языком вообще. Тем не менее, веб-приложения и веб-инструменты в целом являются одними из наиболее распространенных применений Ruby.

Вы можете не только написать свой собственный SMTP-сервер, FTP-демон или веб-сервер на Ruby, но вы также можете использовать Ruby для более обычных задач, таких как программирование CGI или в качестве замены для PHP.

Пожалуйста, потратьте несколько минут с CGI Programming Tutorial для более подробной информации о CGI Programming.

Написание сценариев CGI

Самый простой скрипт Ruby CGI выглядит так —

Live Demo

#!/usr/bin/ruby

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

Если вы вызовете этот сценарий test.cgi и загрузите его в Unix-провайдер веб-хостинга с необходимыми разрешениями, вы можете использовать его в качестве CGI-скрипта.

Например, если у вас есть веб-сайт https://www.example.com/, размещенный у поставщика веб-хостинга Linux, и вы загружаете test.cgi в основной каталог и предоставляете ему разрешения на выполнение, тогда посетите https: // www. example.com/test.cgi должен вернуть HTML-страницу с надписью « Это тест» .

Здесь, когда test.cgi запрашивается из веб-браузера, веб-сервер ищет на веб-сайте test.cgi , а затем выполняет его с использованием интерпретатора Ruby. Сценарий Ruby возвращает базовый заголовок HTTP, а затем возвращает базовый документ HTML.

Использование cgi.rb

Ruby поставляется со специальной библиотекой cgi, которая обеспечивает более сложные взаимодействия, чем с предыдущим CGI-скриптом.

Давайте создадим базовый скрипт CGI, который использует cgi —

Live Demo

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new

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

Здесь вы создали объект CGI и использовали его для печати строки заголовка.

Обработка форм

Использование класса CGI дает вам доступ к параметрам запроса HTML двумя способами. Предположим, нам дан URL-адрес /cgi-bin/test.cgi?FirstName = Zara & LastName = Ali.

Вы можете получить доступ к параметрам FirstName и LastName, используя CGI # [] напрямую следующим образом:

#!/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"]

Если форма содержит несколько полей с одним и тем же именем, соответствующие значения будут возвращены сценарию в виде массива. Метод доступа [] возвращает только первый из этих.индексов результат метода params, чтобы получить их все.

В этом примере предположим, что форма имеет три поля с именем «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>

Создание форм и HTML

CGI содержит огромное количество методов, используемых для создания HTML. Вы найдете один метод для каждого тега. Чтобы включить эти методы, вы должны создать объект CGI, вызвав CGI.new.

Чтобы упростить вложение тегов, эти методы воспринимают свое содержимое как блоки кода. Блоки кода должны возвращать строку , которая будет использоваться в качестве содержимого для тега. Например —

#!/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
         }
      }
   }
}

ПРИМЕЧАНИЕ. — Метод формы класса CGI может принимать параметр метода, который устанавливает метод HTTP (GET, POST и т. Д.), Который будет использоваться при отправке формы. По умолчанию в этом примере используется POST.

Это даст следующий результат —

Content-Type: text/html
Content-Length: 302

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">

<HTML>
   <HEAD>
      <TITLE>This Is a Test</TITLE>
   </HEAD>
   <BODY>
      <FORM METHOD = "post" ENCTYPE = "application/x-www-form-urlencoded">
         <HR>
         <H1>A Form: </H1>
         <TEXTAREA COLS = "70" NAME = "get_text" ROWS = "10"></TEXTAREA>
         <BR>
         <INPUT TYPE = "submit">
      </FORM>
   </BODY>
</HTML>

Цитирование строк

При работе с URL-адресами и HTML-кодом необходимо соблюдать осторожность при цитировании определенных символов. Например, символ косой черты (/) имеет особое значение в URL, поэтому его необходимо экранировать, если он не является частью пути.

Например, любая / в части запроса URL-адреса будет переведена в строку% 2F и должна быть переведена обратно в /, чтобы вы могли ее использовать. Пробел и амперсанд также являются специальными символами. Для этого CGI предоставляет подпрограммы CGI.escape и CGI.unescape .

#!/usr/bin/ruby

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

Это даст следующий результат —

Zara+Ali%2FA Sweet+%26+Sour+Girl")

#!/usr/bin/ruby

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

Это даст следующий результат —

&lt;h1&gt;Zara Ali/A Sweet & Sour Girl&lt;/h1&gt;'

Полезные методы в классе CGI

Вот список методов, связанных с классом CGI —

  • Ruby CGI — Методы, относящиеся к стандартной библиотеке CGI.

Ruby CGI — Методы, относящиеся к стандартной библиотеке CGI.

Файлы cookie и сессии

Мы объяснили эти два понятия в разных разделах. Пожалуйста, следуйте разделам —

Ruby CGI Cookies — Как обращаться с CGI Cookies.

Ruby CGI Sessions — Как управлять сессиями CGI.

Серверы веб-хостинга

Вы можете проверить следующую тему в Интернете, чтобы разместить свой сайт на Unix-сервере —

Unix-хостинг