• Publicidad

Cómo recuperar valores de variables a través del URL

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

Cómo recuperar valores de variables a través del URL

Notapor paopao » 2008-04-10 13:23 @599

Hola, ¿qué tal?

Les cuento mi interrogante, estoy tratando de hacer que una aplicación hecha en Perl (openca) pueda obtener unas variables que se cargan en una consulta que se programó en PHP.

Mi situación es la siguiente:

1. ¿Cómo debo leer las variables que me envía el form (html) con método POST en el archivo de Perl?

2. ¿Cómo se declaran esas variables en el archivo de Perl (globales o locales) (my or our)...

Yo tengo todo en el URL. Mi programa en PHP consulta la BD, valida al usuario y recoge los datos pertenecientes al usuario; luego las almaceno en variables que deben ser exportadas por el url, pero a la hora de enviar la info al archivo de Perl, que dicho sea de paso, también tiene un form con esos mismos campos generales (nombre, cédula (IDN), dirección, teléfono, etc ), no logro capturar los valores.

Soy nueva en Perl, estoy echándole muchas ganas a mi proyecto y he tratado de investigar métodos para lograr lo que necesito, he incluso aquí mismo en el foro encontré algo de módulos de Perl que permiten programar PHP dentro de Perl y viceversa. Sin embargo estoy confundida respecto a si debo o no usarlos en este caso.

Espero recibir alguna respuesta, porfis.

Saludos. :wink:
paopao
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-02-08 13:44 @614

Publicidad

Notapor explorer » 2008-04-10 13:58 @624

1. Con el módulo CGI puedes recuperar fácilmente esas variables. En este foro, en Tutoriales (arriba) encontrarás algunos ejemplos.
2. Como quieras.
Y no, no necesitas ejecutar PHP dentro de Perl, o al revés.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor paopao » 2008-04-10 14:49 @659

Hola explorer.

Hice lo que me indica el manual.

Como uso POST, añadí al código en Perl lo siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $cedula;

read(STDIN, $cedula, $ENV{'CONTENT_LENGTH'});
print Dumper $cedula;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Y el resultado del print es: $VAR1 = '';

Como que no recibe nada...

Revisé el código fuente de la página y allí se ve que en el form sí van los valores de las variables, entre ellas cédula...

Qué será lo que no estoy haciendo bien... :roll:

Gracias por su apoyo.
paopao
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-02-08 13:44 @614

Notapor explorer » 2008-04-10 16:21 @723

Usa el código de mi CGI Mínimo como destino de la llamada desde el PHP y así verás los valores de los parámetros.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Sigo confrontando problemas...

Notapor paopao » 2008-04-11 10:09 @464

Buenos días,

Explorer, probé el código que me distes en un archivo llamado prueba.pl, con todo igual y SÍ funciona.

Sin embargo, al incrustar ese código en el archivo que tiene el resto de la programación NO funciona.

Hay 2 cosas que debo señalarte del OPenCA:

1. Los archivos sí están programados en perl, pero tambien con XML... (es un tema para mí bastante complicado).

2. Los archivos no poseen extensiones ni usan el #!/usr/bin/perl , en la primera línea... cuando se llaman unos a otros en el url lo hacen a través del url más, por ejemplo cmd=index ...

Creo que mi problema mayor es que aun no comprendo bien el nucleo de la estructura del OPENCA.

Explorer, quiero ser clara en decir que no pretendo que en este foro me hagan entender el nucleo del OpenCa, solo pretendo que me ayuden a usar el perl para poder modificar la interfaz y los formularios para hacer la aplicación más amigable.


Voy a postear parte del código del archivo donde espero capturar los valores del url para ver si así es más fácil que me funcione lo que necesito.

Muchas gracias de antemano :oops:


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
## OpenCA - Public Web-Gateway Command
## (c) 1998-2001 by Massimiliano Pala and OpenCA Group
## (c) Copyright 2002-2004 The OpenCA Project
##
##   File Name: basic_csr
##       Brief: basic CSR
##     Version: $Revision: 1.43.2.5 $
## Description: this script creates a CSR
##  Parameters:

use strict;

## holds the type of the request
 
sub cmdBasic_csr {
our ($query, $config, $errval, $cryptoShell, $tools, $db);
my $minPinLength = getRequired('minpinlength');
my $OPERATION    = $query->param ('operation');
##our $type        = $query->param ('CSR_TYPE');
our $type        =  "basic";

## read the loa.xml file and get the values
my $loaOption = getRequired('USE_LOAS');
my ($loaTwig, $xmlLOA, %LOALevels, @LOANames, $loaHtml, $loaSelect, %LOAHash);
if ($loaOption =~ /yes/i)
{
        $loaTwig = loadConfigXML ('LOAConfiguration');
        if (not $loaTwig) {
                generalError (gettext ("Cannot load menu configration"));
        }
        for my $al ($loaTwig->get_xpath("loa"))
        {
            #$DEBUG=1;
            $xmlLOA = gettext(($al->first_child('name'))->field);
            $LOALevels{$xmlLOA}=gettext(($al->first_child('level'))->field);
            $LOAHash{gettext(($al->first_child('level'))->field)}=$xmlLOA;
            push (@LOANames, $xmlLOA);
            debug_cmds ("basic_csr: LOANames: ".@LOANames);
        }
}

## check the submitted data to be consistent

if ( not checkBasic_csr($OPERATION) ) {

        ## build the data

        ## load the normal DN and build the html-elements

        my @elements = getRequiredList ("DN_TYPE_".$type."_ELEMENTS");
        my @user_dn = (); # array with the user fields
        ## scan every element of the DN
        for (my $i=1; $i <= scalar @elements; $i++) {

                my $html;
                my $input_check  = "";
                my $characterset = getRequired ("DN_TYPE_".$type."_ELEMENT_".$i."_CHARACTERSET");
                my $optional     = 0;
                $optional = 1
                    if (getRequired ("DN_TYPE_".$type."_ELEMENT_".$i.'_REQUIRED') !~ /YES/i);

                if ( defined $config->getParam ("DN_TYPE_".$type."_ELEMENT_".$i."_SELECT") ) {
                        my @h    = getRequiredList ("DN_TYPE_".$type."_ELEMENT_".$i."_SELECT");
                        $html = $query->newInput (
                                        -regx     => $characterset,
                                        -intype   => 'popup_menu',
                                        -name     => 'DN_VALUE_'.$i,
                                        -optional => $optional,
                                        -value    => \@h);
                } elsif ( defined $config->getParam ("DN_TYPE_".$type."_ELEMENT_".$i."_XML_FILE") ) {
                        ## load file
                        my $twig = loadConfigXML ("DN_TYPE_".$type."_ELEMENT_".$i."_XML_FILE");

                        ## load path
                        my @fields = $twig->get_xpath (getRequired ("DN_TYPE_".$type."_ELEMENT_".$i."_XML_PATH"));

                        ## setup array
                        my @field_array = ();
                        foreach my $field (@fields)
                        {
                                push @field_array, $field->field;
                        }

                        ## build html
                        $html = $query->newInput (
                                        -regx     => $characterset,
                                        -intype   => 'popup_menu',
                                        -name     => 'DN_VALUE_'.$i,
                                        -optional => $optional,
                                        -value    => \@field_array);
                } else {
                        $html = $query->newInput (
                                        -regx     => $characterset,
                                        -intype   => 'textfield',
                                        -size     => 30,
                                        -name     => 'DN_VALUE_'.$i,
                                        -optional => $optional,
                                        -check    => 'fill',
                                        -minlen   => getRequired ("DN_TYPE_".$type."_ELEMENT_".$i.'_MINIMUM_LENGTH'),
                                        -value  => $query->param ('DN_VALUE_'.$i));
                }
                push ( @user_dn, [
                                getRequired ("DN_TYPE_".$type."_ELEMENT_".$i),
                                $html
                                ]);
        }

        ## Subject Alternative Name Extension ## by oliwel
       
        my @subjectalt_attr = getRequiredList ("DN_TYPE_".$type."_SUBJECTALTNAMES");
        ## scan every element of the DN
        for (my $i=1; $i <= scalar @subjectalt_attr; $i++) {

                my $html;
                my $input_check = "";
                my $optional     = 0;
                $optional = 1
                    if (getRequired ("DN_TYPE_".$type."_SUBJECTALTNAME_".$i.'_REQUIRED') !~ /YES/i);

                if ( defined $config->getParam ("DN_TYPE_".$type."_SUBJECTALTNAME_".$i."_SELECT") ) {
                        my @h = getRequiredList ("DN_TYPE_".$type."_SUBJECTALTNAME_".$i."_SELECT");
                        $html = $query->newInput (
                                        -regx   => 'MIXED',
                                        -intype => 'popup_menu',
                                        -name   => 'SUBJECTALTNAME_VALUE_'.$i,
                                        -value  => \@h);
                } elsif ( defined $config->getParam ("DN_TYPE_".$type."_SUBJECTALTNAME_".$i."_XML_FILE") ) {
                        ## load file
                        my $twig = loadConfigXML ("DN_TYPE_".$type."_SUBJECTALTNAME_".$i."_XML_FILE");

                        ## load path
                        my @fields = $twig->get_xpath (getRequired ("DN_TYPE_".$type."_SUBJECTALTNAME_".$i."_XML_PATH"));

                        ## setup array
                        my @field_array = ();
                        foreach my $field (@fields)
                        {
                                push @field_array, $field->field;
                        }

                        ## build html
                        $html = $query->newInput (
                                        -regx     => 'MIXED',
                                        -intype   => 'popup_menu',
                                        -name     => 'SUBJECTALTNAME_VALUE_'.$i,
                                        -optional => $optional,
                                        -value    => \@field_array);
                } elsif ( $subjectalt_attr [$i-1] =~ /EMAIL/i ) {
                        $html = $query->newInput (
                                        -regx     => 'EMAIL',
                                        -intype   => 'textfield',
                                        -size     => 30,
                                        -name     => 'SUBJECTALTNAME_VALUE_'.$i,
                                        -optional => $optional,
                                        -check    => 'fill',
                                        -minlen   => getRequired ("DN_TYPE_".$type."_SUBJECTALTNAME_".$i.'_MINIMUM_LENGTH'),
                                        -value    => $query->param ('SUBJECTALTNAME_VALUE_'.$i));
                } else {
                        $html = $query->newInput (
                                        -regx     => 'LATIN1_LETTERS',
                                        -intype   => 'textfield',
                                        -size     => 30,
                                        -name     => 'SUBJECTALTNAME_VALUE_'.$i,
                                        -optional => $optional,
                                        -check    => 'fill',
                                        -minlen   => getRequired ("DN_TYPE_".$type."_SUBJECTALTNAME_".$i.'_MINIMUM_LENGTH'),
                                        -value    => $query->param ('SUBJECTALTNAME_VALUE_'.$i));
                }
                push ( @user_dn, [
                                getRequired ("DN_TYPE_".$type."_SUBJECTALTNAME_".$i),
                                $html
                                ]);
        }
        ## end oliwel changes
       
 
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


AUN SIGUE PERO ES MUY EXTENSO...


Al final termina asi :

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
## remove trailing ","
    $dn =~ s/,$//;

    ## microsoft uses E for emailaddress
    $dn =~ s/,\s*emailAddress\s*=/,E=/i;
    $dn =~ s/^\s*emailAddress\s*=/E=/i;

    return $dn;
}
1;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
paopao
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-02-08 13:44 @614

Notapor explorer » 2008-04-11 17:16 @761

He entrado en la página de OpenCA y veo que los ficheros vienen acompañado de una serie de programas de instalación:
https://www.openca.org/~madwolf/ch03s03.html

¿Alguno te ha fallado?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor paopao » 2008-04-14 09:17 @428

No, ninguno de esos programas me ha fallado.

El OpenCA, funciona de lo mejor. Lo que nosotros estamos haciendo es algo que no está incluido en el OPENCA. Te explico un poco más nuestra situación:

El Openca trae un formulario que debe ser llenado por el usuario para realizar la solicitud del certificado. Dicho formulario es un poco complicado, conceptualmente hablando, para mis usuarios ya que no todos son de IT, por lo que se nos solicitó que el mismo se llenase automáticamente con los datos que contiene una BD remota de manera que el usuario solo colocara la frase clave del certificado.

Nosotros hasta el momento hemos logrado entender como están estructurados los links y las funciones que llaman a dicho formulario, también hemos colocado una nueva forma de autenticación para que pudiéramos sacar los datos de la BD remota, todo eso lo hicimos en PHP.

Ahora bien, mi último formulario en PHP envía por un POST al archivo del OPENCA la información que rescatamos de la BD, sin embargo en el archivo del OPENCA no logramos rescatar la data que envía el formulario de PHP.

Mi problema es por qué no recupera los datos el archivo OPENCA, si es un POST y he utilizado los métodos que me han posteado por este foro.

Bueno espero haber aclarado un poco más la situación.

Saludos y muchas gracias Explorer.
paopao
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-02-08 13:44 @614

Notapor explorer » 2008-04-14 11:17 @512

Veo que usa el método param(), que supongo que será del módulo CGI.

Puedes probar a sacar todos los parámetros, al principio del OpenCA, para ver si los ha recibido bien.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor paopao » 2008-04-14 11:24 @517

Coloqué en las primeras líneas lo siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use CGI;

my @parametros = param();
foreach my $par ( @parametros ) {
        print p($par);
        print blockquote(param( $par ));
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Y esto fue lo que me envió:

Código: Seleccionar todo
Configuration error: The loading of the command /usr/local/openca/lib/cmds/basic_csr failed. Undefined subroutine &OpenCA::Server::param called at (eval 139) line 19, <HANDLE> chunk 1.

Configuration error: The loading of the command /usr/local/openca/lib/cmds/basic_csr failed. Undefined subroutine &OpenCA::Server::param called at (eval 139) line 19, <HANDLE> chunk 1.


Algo debí declarar mal.. ¿o quizás el módulo que debo llamar es otro?

¿Qué dicen?

Gracias otra vez...
paopao
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-02-08 13:44 @614

Notapor explorer » 2008-04-14 11:39 @527

Te falta la parte de qw/:standard/;
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Básico

¿Quién está conectado?

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