Aplicativos da Web Ruby - Programação CGI

Ruby é uma linguagem de propósito geral; ela não pode ser chamada propriamente de linguagem da web . Mesmo assim, aplicativos e ferramentas da web em geral estão entre os usos mais comuns do Ruby.

Não apenas você pode escrever seu próprio servidor SMTP, daemon FTP ou servidor Web em Ruby, mas também pode usar Ruby para tarefas mais usuais, como programação CGI ou como um substituto para PHP.

Por favor, gaste alguns minutos com o Tutorial de programação CGI para obter mais detalhes sobre a programação CGI.

Escrevendo Scripts CGI

O script CGI Ruby mais básico se parece com isto -

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

Se você chamar esse script de test.cgi e carregá -lo em um provedor de hospedagem na Web baseado em Unix com as permissões corretas, poderá usá-lo como um script CGI.

Por exemplo, se você tiver o site https://www.example.com/hospedado com um provedor de hospedagem da Web Linux e você carrega test.cgi para o diretório principal e dá a ele permissões de execução, visitandohttps://www.example.com/test.cgi deve retornar uma página HTML dizendo This is a test.

Aqui, quando test.cgi é solicitado de um navegador da Web, o servidor da Web procura por test.cgi no site da Web e o executa usando o interpretador Ruby. O script Ruby retorna um cabeçalho HTTP básico e, em seguida, retorna um documento HTML básico.

Usando cgi.rb

Ruby vem com uma biblioteca especial chamada cgi que permite interações mais sofisticadas do que aquelas com o script CGI anterior.

Vamos criar um script CGI básico que usa cgi -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new

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

Aqui, você criou um objeto CGI e o usou para imprimir a linha do cabeçalho para você.

Processamento de Formulário

O uso da classe CGI fornece acesso aos parâmetros de consulta HTML de duas maneiras. Suponha que recebemos um URL de /cgi-bin/test.cgi?FirstName = Zara & LastName = Ali.

Você pode acessar os parâmetros FirstName e LastName usando CGI # [] diretamente da seguinte forma -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi['FirstName'] # =>  ["Zara"]
cgi['LastName']  # =>  ["Ali"]

Existe outra maneira de acessar essas variáveis ​​de formulário. Este código fornecerá um hash de todas as chaves e valores -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
h = cgi.params  # =>  {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h['FirstName']  # =>  ["Zara"]
h['LastName']   # =>  ["Ali"]

A seguir está o código para recuperar todas as chaves -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi.keys         # =>  ["FirstName", "LastName"]

Se um formulário contiver vários campos com o mesmo nome, os valores correspondentes serão retornados ao script como uma matriz. O acessador [] retorna apenas o primeiro deles.index o resultado do método params para obter todos eles.

Neste exemplo, suponha que o formulário tenha três campos chamados "nome" e inserimos três nomes "Zara", "Huma" e "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"]}

Note- Ruby cuidará dos métodos GET e POST automaticamente. Não existe um tratamento separado para esses dois métodos diferentes.

Um formulário associado, mas básico, que poderia enviar os dados corretos, teria o código HTML assim -

<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>

Criação de formulários e HTML

CGI contém um grande número de métodos usados ​​para criar HTML. Você encontrará um método por tag. Para habilitar esses métodos, você deve criar um objeto CGI chamando CGI.new.

Para facilitar o aninhamento de tags, esses métodos consideram seu conteúdo como blocos de código. Os blocos de código devem retornar uma String , que será usada como o conteúdo da tag. Por exemplo -

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

NOTE- O método de formulário da classe CGI pode aceitar um parâmetro de método, que definirá o método HTTP (GET, POST e assim por diante ...) a ser usado no envio do formulário. O padrão, usado neste exemplo, é POST.

Isso produzirá o seguinte resultado -

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>

Citando Strings

Ao lidar com URLs e código HTML, você deve ter o cuidado de citar alguns caracteres. Por exemplo, um caractere de barra (/) tem um significado especial em um URL, então deve serescaped se não fizer parte do nome do caminho.

Por exemplo, qualquer / na parte da consulta do URL será traduzido para a string% 2F e deve ser traduzido de volta para / para que você possa usá-lo. Espaço e e comercial também são caracteres especiais. Para lidar com isso, CGI fornece as rotinasCGI.escape e CGI.unescape.

#!/usr/bin/ruby

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

Isso produzirá o seguinte resultado -

Zara+Ali%2FA Sweet+%26+Sour+Girl")
#!/usr/bin/ruby

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

Isso produzirá o seguinte resultado -

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

Métodos úteis na classe CGI

Aqui está a lista de métodos relacionados à classe CGI -

  • O CGI Ruby - Métodos relacionados à biblioteca CGI padrão.

Cookies e Sessões

Explicamos esses dois conceitos em seções diferentes. Siga as seções -

Servidores de hospedagem na web

Você pode verificar o seguinte tópico na internet para hospedar seu site em um servidor baseado em Unix -