English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Programação CGI Ruby

Ruby é uma linguagem genérica, não é apenas uma linguagem aplicada ao desenvolvimento web, mas o desenvolvimento de aplicações web e ferramentas web com Ruby é o mais comum.

Usando Ruby, você pode não só escrever seu próprio servidor SMTP, programa FTP ou servidor web Ruby, mas também usar Ruby para programar CGI.

Vamos dedicar um tempo para aprender a editar CGI no Ruby.

Navegação na web

Para entender melhor como o CGI funciona, podemos seguir o fluxo de clique em um link ou URL na página da web:

  • 1Acesse a URL usando seu navegador e conecte-se ao servidor web HTTP.

  • 2O servidor web recebe informações de solicitação, resolve a URL e verifica se o arquivo solicitado existe no servidor. Se existir, retorna o conteúdo do arquivo; caso contrário, retorna uma mensagem de erro.

  • 3O navegador recebe informações do servidor e exibe o arquivo recebido ou uma mensagem de erro.

Programas CGI podem ser scripts Ruby, scripts Python, scripts PERL, scripts SHELL, C ou C++ programas, etc.

Gráfico de arquitetura CGI

Suporte e configuração do servidor web

Antes de começar a programar CGI, certifique-se de que seu servidor web suporta CGI e que o processador CGI está configurado.

O Apache suporta configurações CGI:

Configure o diretório CGI:

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

Todos os servidores HTTP executam programas CGI em um diretório pré-configurado. Este diretório é chamado de diretório CGI e, conforme a convenção, é nomeado/var/www/cgi-diretório bin.

Os arquivos CGI têm a extensão .cgi, e o Ruby também pode usar a extensão .rb.

Pelo padrão, o servidor Linux está configurado para executar cgi-O diretório bin contém/var/www。

Se você quiser especificar outro diretório para a execução de scripts CGI, pode modificar o arquivo de configuração httpd.conf conforme mostrado a seguir:

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options +ExecCGI
   Order allow,deny
   Allow from all
body>/Directory>

Adicione o sufixo .rb no AddHandler, assim podemos acessar arquivos de scripts Ruby com final .rb:

AddHandler cgi-script.cgi .pl .rb

Escrever scripts CGI

O código básico do Ruby CGI é mostrado a seguir:

#!/usr/bin/ruby
puts "Content"-type: text/html\n\n"
puts "<html><body>This is a test</body></html>"

Você pode manter o código no arquivo test.cgi, carregar no servidor e atribuir permissões suficientes para executar como script CGI.

Se o endereço do seu site for http://<form method="POST" action="http:/ ,即可用过http://<form method="POST" action="http:/Acesso ao programa test.cgi, o resultado de saída é: "This is a test."。

Após o navegador acessar o endereço, o servidor da Web encontrará o arquivo test.cgi na pasta do site e o analisará com o interpretador Ruby para acessar o documento HTML.

Usando cgi.rb

Ruby pode chamar a biblioteca CGI para escrever scripts CGI mais complexos.

O seguinte código chama a biblioteca CGI para criar um script de CGI.

#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
puts cgi.header
puts "<html><body>This is a test</body></html>"

No seguinte código, é criado um objeto CGI e as informações de cabeçalho são impressas.

Processamento de formulário

Pode-se obter os dados de submissão do formulário (ou parâmetros da URL) de duas maneiras usando a biblioteca CGI. Por exemplo, URL:/cgi-bin/test.cgi?FirstName=Zara&LastName=Ali。

Você pode usar CGI#[] para obter diretamente os parâmetros FirstName e LastName:

#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
cgi['FirstName'] # => ["Zara"]
cgi['LastName'] # => ["Ali"]

Outra maneira de obter dados do formulário:

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

O seguinte código é usado para recuperar todos os valores das chaves:

#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
cgi.keys # => ["FirstName", "LastName"]

Se o formulário contiver vários campos com o mesmo nome, os valores do campo idêntico serão armazenados em um array.

No exemplo a seguir, especifica três campos iguais no formulário "name", com os valores "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.keys           # => ["name"]

cgi.params         # => {"name"=>["Zara", "Huma", "Nuha"]}Atenção:

O Ruby automaticamente identifica os métodos GET e POST, portanto, não é necessário tratar os dois métodos de maneira diferente.

Aqui está o código HTML relacionado:
<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>/<

html>

Criar Formulários e HTML O CGI contém muitos métodos para criar HTML, cada tag HTML tem um método correspondente.

Antes de usar esses métodos, é necessário criar o objeto CGI com CGI.new.

#!/usr/bin/ruby
Para tornar a nesting de tags mais simples, esses métodos fazem do conteúdo um bloco de código, que retorna a string como o conteúdo da tag. Veja a seguir:
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
         }
      }
   }
}

Escapamento de String

Quando você está lidando com parâmetros de URL ou dados de formulário HTML, é necessário escapar os caracteres especiais especificados, como: aspas (") e barras invertidas (\)/)。

O objeto CGI do Ruby oferece métodos CGI.escape e CGI.unescape para lidar com a escapamento desses caracteres especiais:

#!/usr/bin/ruby
require 'cgi'
puts CGI.escape(Zara Ali/Uma Garota Doce e Ácida

O resultado da execução do código acima é o seguinte:

#!/usr/bin/ruby
require 'cgi'
puts CGI.escape(Zara Ali/Uma Garota Doce e Ácida

Outro exemplo:

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

O resultado da execução do código acima é o seguinte:

<h1>Zara Ali/A Sweet & Sour Girl</h1>'

Métodos comuns na classe CGI

A seguir estão os métodos completos da classe CGI no Ruby

  • CGI Ruby  - Métodos relacionados à Biblioteca CGI Padrão

Cookies e Sessões