• Publicidad

Problemas con formulario, cgi y servidor personal

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problemas con formulario, cgi y servidor personal

Notapor davidferrero » 2009-07-30 01:18 @096

De primeras, enhorabuena por la página y gracias por toda la ayuda.

Tras esto, perdón por si el mensaje no es tipo básico pero lo escribo aquí ya que este se asemeja con el nivel de conocimiento que tengo.

La situación es la siguiente: me dispongo a crear un servidor con sockets; con más o menos problema estoy siguiendo la lectura de los libros y artículos que otras veces se han comentado. Mi duda es la siguiente: dentro del servidor tengo un formulario HTML que trato mediante un CGI; si muestro la página y gestiono mediante el Apache, incluyendo el CGI en /usr/lib/cgi-bin, la gestión del mismo es correcta, pero no con mi servidor, es decir, ¿dónde debería situar o qué debería hacer para que funcionara igual que en Apache? ¿es problema del servidor o de cómo gestiono el cgi?

Esta sería la llamada al CGI del formulario:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
<FORM METHOD="GET" ACTION="http://172.16.77.142:680/cgi-bin/gestion_formulario.cgi">
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
davidferrero
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-29 03:12 @175

Publicidad

Re: Problemas con formulario, cgi y servidor personal

Notapor explorer » 2009-07-30 06:19 @305

Bienvenido a los foros de Perl en Español, davidferrero.

Por lo que se ve en el código, tienes a tu servidor escuchando en el puerto 680. Entonces, allí es donde recibirá la petición HTTP desde el cliente web que pulse el botón de envío del formulario.

Tu recibirás una petición del estilo
Código: Seleccionar todo
GET http://172.16.77.142:680/cgi-bin/gestion_formulario.cgi HTTP/1.1

Y eso, debe traducirlo tu programa según tus planes. Es decir: tu debes saber que esa petición es correcta, dónde está la raíz de los documentos correspondientes a esa petición, dónde está el directorio correspondiente al recurso /cgi-bin, si existe el recurso gestion_formulario.cgi, si es accesible y ejecutable por el usuario que ejecuta el propio servidor, ejecutarlo, guardar su salida y enviarla al usuario, con su correspondiente cabecera MIME.

El protocolo HTTP, en realidad es muy sencillo, ya que no está orientado a la conexión.

En Perl existen ejemplos de mini-servidores HTTP muy pequeños:
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problemas con formulario, cgi y servidor personal

Notapor davidferrero » 2009-07-30 06:38 @318

Gracias por tu respuesta aunque siento mi ignorancia, pero si no entiendo mal debería de tener otro servidor para las peticiones HTTP. El servidor que tengo ahora no es más que el código que adjunto. La idea es que con esto se gestione la monitorización del sistema Linux donde se ejecute el servidor, y que una de las opciones sea acceder a un formulario que gestione los parámetros de la configuración, para modificar un fichero txt. Pero cuando ejecuto el formulario lo único que hace es mostrar los datos en la cabecera pero la misma página donde estaba, es decir no lo gestiona el cgi que tengo, ya que sino debería mostrar un mensaje. Lo que no sé, es si esto no lo hace por donde ubico el cgi o porque no lo hace el servidor.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl -w
  2.  
  3. #LIBRERIAS
  4.  
  5. use strict;
  6. use IO::Socket;
  7.  
  8. require "Monitorizar.pl";
  9.  
  10. #
  11. sub Wait{
  12. wait; #wait needed to keep <defunct> pids from building up
  13. }
  14.  
  15. $SIG{CHLD}=\&Wait;
  16.  
  17. my $server = IO::Socket::INET->new(
  18. PeerAddr => inet_ntoa(INADDR_BROADCAST),
  19. LocalPort=>680,
  20. Type=>SOCK_STREAM,
  21. Reuse=>1,
  22. Listen=>10) or die "$@\n";
  23. my $client;
  24.  
  25. #
  26.  
  27. while ( $client = $server->accept())
  28. {
  29. next if my $pid = fork;
  30. die "fork - $!\n" unless defined $pid;
  31. select $client;
  32. $|=1;
  33. print $client generarHTML();
  34. close($client);
  35. exit(fork);
  36. }
  37. continue
  38. {
  39. close($client);
  40. kill CHLD=>-$$;
  41. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
davidferrero
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-29 03:12 @175

Re: Problemas con formulario, cgi y servidor personal

Notapor explorer » 2009-07-30 08:50 @410

A ver...

Has sido tú quien ha dicho que estás haciendo un servidor que debe responder a solicitudes HTTP, así que debe ser tu servidor el que las responda.

Si en el formulario pones que se conecte al puerto de tu servidor, entonces es que quieres responder tu. No necesitas, al menos de principio, tener un servidor distinto... ¿para qué? Todo depende de lo que quieres hacer.

En cuanto a monitorizar sistemas Linux hay montones de herramientas prefabricadas ya existentes que hacen esa labor. Desde el humilde protocolo SMNP hasta herramientas completas como el Nagios.

En Perl, naturalmente, existen módulos con interfaces para estas herramientas.

Pero siempre está bien intentar hacerlas uno mismo (si se tiene tiempo y ganas de aprender, claro).

Lo que sería interesante es ver por qué no puedes tener instalado un servidor web para realizar ese trabajo. Instalarlo no cuesta mucho y te ahorraría el desarrollo de un servidor + gestión de CGI.

Si no sabes lo que está haciendo tu servidor, pon sentencias print() para saber por dónde o qué está haciendo. O que lo derive hacia el syslog. Una especie de registro de actividad.

En cuanto a la ubicación del cgi, es un problema tuyo localizarle porque es tu servidor el que está atendiendo esa petición HTTP. Dentro del servidor, debes ir al directorio donde guardas los CGI, y ejecutar el que te dicen. Recoger el resultado y devolverlo al usuario (esto es lo que te ahorras de hacer si usases un Apache en el lado del servidor).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron