in

Python – Programación CGI

1635136555 84 cgiarch

La Common Gateway Interface, o CGI, es un conjunto de estándares que definen cómo se intercambia la información entre el servidor web y un script personalizado. Las especificaciones CGI las mantiene actualmente la NCSA.

¿Qué es CGI?

  • La Interfaz de puerta de enlace común, o CGI, es un estándar para que los programas de puerta de enlace externos interactúen con servidores de información como los servidores HTTP.

  • La versión actual es CGI / 1.1 y CGI / 1.2 está en proceso.

Buscando en la web

Para comprender el concepto de CGI, veamos qué sucede cuando hacemos clic en un hipervínculo para navegar por una página web o URL en particular.

  • Su navegador se pone en contacto con el servidor web HTTP y solicita la URL, es decir, el nombre del archivo.

  • Web Server analiza la URL y busca el nombre del archivo. Si encuentra ese archivo, lo devuelve al navegador; de lo contrario, envía un mensaje de error que indica que solicitó un archivo incorrecto.

  • El navegador web recibe la respuesta del servidor web y muestra el archivo recibido o el mensaje de error.

Sin embargo, es posible configurar el servidor HTTP para que cada vez que se solicite un archivo en un directorio determinado, ese archivo no se devuelva; en su lugar, se ejecuta como un programa, y ​​todo lo que genera ese programa se envía de vuelta para que lo muestre su navegador. Esta función se llama Common Gateway Interface o CGI y los programas se denominan scripts CGI. Estos programas CGI pueden ser un script de Python, un script PERL, un script de shell, un programa C o C ++, etc.

Diagrama de arquitectura CGI

Arquitectura CGI

Soporte y configuración del servidor web

Antes de continuar con la programación CGI, asegúrese de que su servidor web sea compatible con CGI y esté configurado para manejar programas CGI. Todos los programas CGI que ejecutará el servidor HTTP se guardan en un directorio preconfigurado. Este directorio se llama CGI Directory y por convención se denomina / var / www / cgi-bin. Por convención, los archivos CGI tienen la extensión. cgi, pero puedes mantener tus archivos con la extensión python .py así como.

De forma predeterminada, el servidor Linux está configurado para ejecutar solo los scripts en el directorio cgi-bin en / var / www. Si desea especificar cualquier otro directorio para ejecutar sus scripts CGI, comente las siguientes líneas en el archivo httpd.conf:

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

<Directory "/var/www/cgi-bin">
Options All
</Directory>

Aquí, asumimos que tiene Web Server funcionando correctamente y que puede ejecutar cualquier otro programa CGI como Perl o Shell, etc.

Primer programa CGI

Aquí hay un enlace simple, que está vinculado a un script CGI llamado hello.py. Este archivo se guarda en el directorio / var / www / cgi-bin y tiene el siguiente contenido. Antes de ejecutar su programa CGI, asegúrese de haber cambiado el modo de archivo usando chmod 755 hola.py Comando de UNIX para hacer que el archivo sea ejecutable.

#!/usr/bin/python

print "Content-type:text/htmlrnrn"
print '<html>'
print '<head>'
print '<title>Hello World - First CGI Program</title>'
print '</head>'
print '<body>'
print '<h2>Hello World! This is my first CGI program</h2>'
print '</body>'
print '</html>'

Si hace clic en hello.py, esto produce el siguiente resultado:

Hola Mundo! Este es mi primer programa CGI

Esta secuencia de comandos hello.py es una secuencia de comandos de Python simple, que escribe su salida en el archivo STDOUT, es decir, la pantalla. Hay una característica adicional importante disponible que es la primera línea que se imprimirá Tipo de contenido: texto / html r n r n. Esta línea se envía de vuelta al navegador y especifica el tipo de contenido que se mostrará en la pantalla del navegador.

A estas alturas, debe haber entendido el concepto básico de CGI y puede escribir muchos programas CGI complicados usando Python. Este script puede interactuar con cualquier otro sistema externo también para intercambiar información como RDBMS.

Encabezado HTTP

La línea Tipo de contenido: texto / html r n r n es parte del encabezado HTTP que se envía al navegador para comprender el contenido. Todo el encabezado HTTP tendrá el siguiente formato:

HTTP Field Name: Field Content

For Example
Content-type: text/htmlrnrn

Hay algunos otros encabezados HTTP importantes, que utilizará con frecuencia en su programación CGI.

No Señor. Encabezado y descripción
1

Tipo de contenido:

Una cadena MIME que define el formato del archivo que se devuelve. El ejemplo es Content-type: text / html

2

Caduca: Fecha

La fecha en que la información deja de ser válida. El navegador lo utiliza para decidir cuándo es necesario actualizar una página. Una cadena de fecha válida tiene el formato 01 de enero de 1998 12:00:00 GMT.

3

Ubicación: URL

La URL que se devuelve en lugar de la URL solicitada. Puede utilizar este campo para redirigir una solicitud a cualquier archivo.

4

Última modificación: fecha

La fecha de la última modificación del recurso.

5

Longitud del contenido: N

La longitud, en bytes, de los datos que se devuelven. El navegador usa este valor para informar el tiempo estimado de descarga de un archivo.

6

Set-Cookie: Cadena

Establecer la cookie pasada a través del cuerda

Variables de entorno CGI

Todos los programas CGI tienen acceso a las siguientes variables de entorno. Estas variables juegan un papel importante al escribir cualquier programa CGI.

No Señor. Nombre y descripción de la variable
1

TIPO DE CONTENIDO

El tipo de datos del contenido. Se utiliza cuando el cliente envía contenido adjunto al servidor. Por ejemplo, carga de archivos.

2

LARGANCIA DE CONTENIDO

La longitud de la información de la consulta. Está disponible solo para solicitudes POST.

3

HTTP_COOKIE

Devuelve las cookies configuradas en forma de par clave y valor.

4

HTTP_USER_AGENT

El campo de encabezado de solicitud de agente de usuario contiene información sobre el agente de usuario que origina la solicitud. Es el nombre del navegador web.

5

PATH_INFO

La ruta del script CGI.

6

QUERY_STRING

La información codificada en URL que se envía con la solicitud del método GET.

7

REMOTE_ADDR

La dirección IP del host remoto que realiza la solicitud. Este es un registro útil o para la autenticación.

8

SERVIDOR REMOTO

El nombre completo del host que realiza la solicitud. Si esta información no está disponible, entonces REMOTE_ADDR se puede utilizar para obtener la dirección de infrarrojos.

9

REQUEST_METHOD

El método utilizado para realizar la solicitud. Los métodos más comunes son GET y POST.

10

SCRIPT_FILENAME

La ruta completa al script CGI.

11

SCRIPT_NAME

El nombre del script CGI.

12

NOMBRE DEL SERVIDOR

El nombre de host o la dirección IP del servidor

13

SERVER_SOFTWARE

El nombre y la versión del software que está ejecutando el servidor.

Aquí hay un pequeño programa CGI para enumerar todas las variables CGI. Haga clic en este enlace para ver el resultado Obtener entorno

#!/usr/bin/python

import os

print "Content-type: text/htmlrnrn";
print "<font size=+1>Environment</font><br>";
for param in os.environ.keys():
   print "<b>%20s</b>: %s<br>" % (param, os.environ[param])

Métodos GET y POST

Debe haberse encontrado con muchas situaciones en las que necesita pasar información de su navegador al servidor web y, en última instancia, a su programa CGI. Con mayor frecuencia, el navegador utiliza dos métodos: dos pasan esta información al servidor web. Estos métodos son el método GET y el método POST.

Pasar información mediante el método GET

El método GET envía la información de usuario codificada adjunta a la solicitud de página. La página y la información codificada están separadas por? personaje de la siguiente manera:

http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2

El método GET es el método predeterminado para pasar información del navegador al servidor web y produce una cadena larga que aparece en el cuadro Ubicación: de su navegador. Nunca use el método GET si tiene una contraseña u otra información confidencial para pasar al servidor. El método GET tiene una limitación de tamaño: solo se pueden enviar 1024 caracteres en una cadena de solicitud. El método GET envía información usando el encabezado QUERY_STRING y será accesible en su Programa CGI a través de la variable de entorno QUERY_STRING.

Puede pasar información simplemente concatenando pares de clave y valor junto con cualquier URL o puede usar etiquetas HTML

para pasar información usando el método GET.

Ejemplo de URL simple: método Get

Aquí hay una URL simple, que pasa dos valores al programa hello_get.py usando el método GET.

/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI

A continuación es hello_get.py script para manejar la entrada proporcionada por el navegador web. Vamos a usar cgi módulo, que hace que sea muy fácil acceder a la información transmitida –

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print "Content-type:text/htmlrnrn"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"

Esto generaría el siguiente resultado:

Ejemplo de FORM simple: método GET

Este ejemplo pasa dos valores usando HTML FORM y el botón de enviar. Usamos el mismo script CGI hello_get.py para manejar esta entrada.

<form action = "/cgi-bin/hello_get.py" method = "get">
First Name: <input type = "text" name = "first_name">  <br />

Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>

Aquí está el resultado real del formulario anterior, ingrese el nombre y apellido y luego haga clic en el botón enviar para ver el resultado.

Pasar información mediante el método POST

Un método generalmente más confiable para pasar información a un programa CGI es el método POST. Esto empaqueta la información exactamente de la misma manera que los métodos GET, pero en lugar de enviarla como una cadena de texto después de? en la URL lo envía como un mensaje separado. Este mensaje llega al script CGI en forma de entrada estándar.

A continuación se muestra el mismo script hello_get.py que maneja el método GET y POST.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print "Content-type:text/htmlrnrn"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"

Tomemos de nuevo el mismo ejemplo que el anterior, que pasa dos valores usando el FORMULARIO HTML y el botón Enviar. Usamos el mismo script CGI hello_get.py para manejar esta entrada.

<form action = "/cgi-bin/hello_get.py" method = "post">
First Name: <input type = "text" name = "first_name"><br />
Last Name: <input type = "text" name = "last_name" />

<input type = "submit" value = "Submit" />
</form>

Aquí está la salida real del formulario anterior. Ingrese el nombre y apellido y luego haga clic en el botón enviar para ver el resultado.

Pasar datos de casillas de verificación al programa CGI

Las casillas de verificación se utilizan cuando se requiere seleccionar más de una opción.

Aquí hay un ejemplo de código HTML para un formulario con dos casillas de verificación:

<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" value = "on" /> Maths
<input type = "checkbox" name = "physics" value = "on" /> Physics
<input type = "submit" value = "Select Subject" />
</form>

El resultado de este código es el siguiente formulario:

A continuación se muestra el script checkbox.cgi para manejar la entrada proporcionada por el navegador web para el botón de casilla de verificación.

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
if form.getvalue('maths'):
   math_flag = "ON"
else:
   math_flag = "OFF"

if form.getvalue('physics'):
   physics_flag = "ON"
else:
   physics_flag = "OFF"

print "Content-type:text/htmlrnrn"
print "<html>"
print "<head>"
print "<title>Checkbox - Third CGI...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

aplicacion youtube 1

Cómo ver videos de YouTube sin tener una conexión a Internet desde su teléfono celular

apple touch icon@2

git – ¿Qué significa «Cambios no preparados para confirmar»?