English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ruby es un lenguaje general, no solo un lenguaje aplicado al desarrollo web, pero el desarrollo de aplicaciones web y herramientas web es lo más común en Ruby.
Con Ruby, no solo puede escribir su propio servidor SMTP, programa FTP o servidor web Ruby, sino que también puede programar CGI con Ruby.
Ahora, dediquemos un tiempo a aprender a editar CGI en Ruby.
Para entender mejor cómo funciona CGI, podemos seguir el flujo de hacer clic en un enlace o URL en una página web:
1、utilice su navegador para acceder a la URL y conectarse al servidor web HTTP.
2、el servidor web analiza la información de la solicitud y busca si el archivo solicitado existe en el servidor; si existe, devuelve el contenido del archivo, de lo contrario, devuelve un mensaje de error.
3、el navegador recibe información del servidor y muestra el archivo recibido o el mensaje de error.
Los programas CGI pueden ser scripts Ruby, scripts Python, scripts PERL, scripts SHELL, C o C++ programas, etc.
Antes de comenzar a programar CGI, asegúrese de que su servidor web admite CGI y ha configurado el procesador de CGI.
Apache admite la configuración de CGI:
Configurar el directorio CGI:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Todos los servidores HTTP ejecutan programas CGI en un directorio preconfigurado. Este directorio se llama directorio CGI y, según la convención, se llama/var/www/cgi-Directorio bin.
Los archivos CGI tienen la extensión .cgi, Ruby también puede usar la extensión .rb.
Por defecto, la configuración del servidor Linux ejecuta cgi-El directorio bin contiene/var/www。
Si desea especificar otro directorio para ejecutar scripts CGI, puede modificar el archivo de configuración httpd.conf como se muestra a continuación:
<Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all body>/Directory>
Agregue la extensión .rb en AddHandler, de esta manera podemos acceder a los archivos de scripts Ruby que terminan en .rb:
AddHandler cgi-script.cgi .pl .rb
El código más básico de Ruby CGI se muestra a continuación:
#!/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"]}Atención:
Ruby juzga automáticamente los métodos GET y POST, por lo que no es necesario tratarlos de manera distinta.
A continuación se muestra el código HTML relevante: <html> <body>//<form method="POST" action="http:/www.example.com test.cgi"> /<input type="submit" value="Submit Data" Nombre: <input type="text" name="FirstName" value="" /<input type="submit" value="Submit Data" <br /<input type="submit" value="Submit Data" Apellido: <input type="text" name="LastName" value="" /<input type="submit" value="Submit Data" body>/> body>/form> body>/<
Creación de formularios y HTML El paquete CGI contiene una gran cantidad de métodos para crear HTML, cada etiqueta HTML tiene un método correspondiente.
Antes de usar estos métodos, es necesario crear el objeto CGI con CGI.new.
#!/usr/bin/ruby Para simplificar la nesting de etiquetas, estos métodos toman el contenido como bloques de código, y los bloques de código devuelven una cadena como contenido de la etiqueta. Véase a continuación: 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 } } } }
Cuando estás procesando parámetros de URL o datos de formularios HTML, debes escapar los caracteres especiales especificados, como: comillas ("), barras invertidas (\)/)。
El objeto CGI de Ruby proporciona los métodos CGI.escape y CGI.unescape para manejar la escapada de estos caracteres especiales:
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/Una chica dulce y ácida
El resultado de ejecutar el código anterior es el siguiente:
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/Una chica dulce y ácida
Otro ejemplo:
#!/usr/bin/ruby require 'cgi' puts CGI.escapeHTML('<h1>Zara Ali/Una chica dulce y ácida</h1>')
El resultado de ejecutar el código anterior es el siguiente:
<h1>Zara Ali/Una chica dulce y ácida</h1>'
A continuación se muestra la lista completa de métodos de la clase CGI en Ruby
CGI en Ruby - Métodos relacionados con la biblioteca CGI estándar
Cookies CGI en Ruby - Cómo manejar cookies CGI.
Sesiones CGI en Ruby - Cómo manejar sesiones CGI.