• Publicidad

Login con Perl en phpbb2

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Notapor kidd » 2007-07-25 13:45 @615

explorer escribiste:Cuando digo que NO es necesario crear cookies 'a mano' para entrar en un foro (como puede ser este), es que NO es necesario...


Había entendido yo el problema de otra manera, por alguna razón me parecía que zozo666 quería hacer su propia versión del login de PHP, pero es buena solución la que planteas, aunque no muy práctica en caso de que quiera hacer su propio sistema de login como yo tenía pensado.


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Publicidad

Notapor zozo666 » 2007-07-25 14:29 @645

Muy buena, ahora ya voy a probar lo de explorer. Esto sirve para loguearse desde un formulario que se comunica con un cgi Perl, ¿no? ¿Le puedo pasar los parámetros sin problemas a este CGI?
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483

Notapor explorer » 2007-07-25 14:50 @660

Otra solución, usando el fantástico módulo WWW::Mechanize.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use WWW::Mechanize;

use strict;
use warnings;

# Nuestro agente web. La jarra de galletas, en memoria
my $agente = WWW::Mechanize->new( cookie_jar => {} );

# Traemos la página de login
$agente->get('http://perlenespanol.com/foro/login.php');

# Nos logueamos
my $res = $agente->submit_form(
    with_fields => {
                    username => 'explorer',
                    password => 'astrolab10',
                    autologin=> 'on',
                    },
    button      => 'login',
);

# Si hemos tenido éxito
if ( $res->is_success ) {

    # Pedimos el panel de control
    $agente->get('http://perlenespanol.com/foro/profile.php?mode=editprofile');

    # Buscamos el formulario con el email
    $agente->form_with_fields('email')     or die "ERROR: No encuentro el formulario";

    # Lo sacamos a pantalla
    print $agente->value('email'), "\n";
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
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 explorer » 2007-07-25 14:55 @663

zozo666 escribiste:Muy buena, ahora ya voy a probar lo de explorer. Esto sirve para loguearse desde un formulario que se comunica con un cgi Perl, ¿no? ¿Le puedo pasar los parámetros sin problemas a este CGI?
Será un CGI si lo utilizas como tal, pero si no, puede ser un programa normal y corriente.

En WWW::Mechanize::Examples hay uno de cómo hacer justamente eso.
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 zozo666 » 2007-07-25 15:25 @684

Tengo un problema. Acá esta el código (modificado para que funcione acá):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Cookies;
use HTTP::Request::Common qw(POST);

use strict;
use warnings;

# Creamos el objeto para acceder vía web
my $ua = LWP::UserAgent->new;

# Decimos dónde pondremos nuestra jarra de galletas.
# Es un fichero normal, por lo que la colocaremos en el mismo directorio de trabajo, con un nombre determinado
$ua->cookie_jar(HTTP::Cookies->new(file => "lwpcookies.txt", autosave => 1));

# Bien, vamos a loguearnos.
# Hacemos un POST al formulario de login.php, pasándole los parámetros requeridos
my $req = POST 'http://localhost:8080/phpbb1/login.php',
          [ username => 'zozo666', password => '123456', autologin => 1, login => 'Login' ];

#Aquí, si todo va bien, obtendríamos una cabecera HTTP con un redirect a la página de entrada
#print $ua->request($req)->as_string;

# Ya estamos dentro (que sí, que sí), así que vamos a nuestro panel de control, nuestro perfil
# Para eso, hacemos una petición de una página normal, con un GET.
# ATENCIÓN: LA COOKIE SALE DE FORMA AUTOMÁTICA DE NUESTRA JARRA DE GALLETAS
my $res = $ua->request(
    HTTP::Request->new(GET => 'http://localhost:8080/phpbb1/profile.php?mode=editprofile')
);

# Si todo va bien, veremos un 200 OK
#print $res->status_line, "\n";

# Si hemos tenido éxito
if ($res->is_success) {

    # Pintamos toda la información de nuestro perfil
    #print $res->as_string;

    # De todo el perfil, solo nos interesa la línea que pone email y sacamos su valor
    my ($email) = $res->as_string =~ m/email.*?value="(.*?)"/;
    print "$email\n";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Bueno yo lo corro desde el ISS no desde Apache, o sea yo ISS lo tengo en localhost y Apache lo tengo en localhost:8080. Tengo un problema cuando entro a "http://localhost/cgi-bin/registro_comunidad/login_foro.pl", me aparece el cartel como para descargar ese archivo de Perl. El Perl funciona bárbaro en ISS pero en Apache no lo tengo activado. ¿Será por eso que no funciona el script? Si es así me dirían cómo habilitar Perl en Apache. Muchas gracias y disculpen las molestias.
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483

Notapor explorer » 2007-07-25 15:55 @705

Por este foro hay muchas respuestas a esa pregunta. Usa el sistema de búsqueda. Busca por Apache y CGI.
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 zozo666 » 2007-07-25 16:25 @725

Lo que quería saber era si el script tendría que funcionar o sea, si estaba bien armado.

Probé el que se utiliza el modulo WWW::Mechanize y lo que me hace es tirarme

Código: Seleccionar todo
CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:

Can't locate object method "form_with_fields" via package "WWW::Mechanize" at c:\inetpub\wwwroot\cgi-bin\registro_comunidad\login_foro.pl line 30.


Me tiraba también el mismo error pero en la linea 15 con "with_fields" pero le borré el with_ y pasó. ¿Cómo arreglo eso? Borré el form_with y dejé fields como arriba, pero me tira el mismo error.
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483

Notapor kidd » 2007-07-25 17:26 @768

¿Estás seguro que tienes instalado el módulo WWW::Mechanize? O si lo tienes, verifica que esté actualizado.

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor zozo666 » 2007-07-25 17:40 @778

Está instalado todo, pero me tira ese error.
zozo666
Perlero nuevo
Perlero nuevo
 
Mensajes: 139
Registrado: 2007-05-26 10:36 @483

Notapor explorer » 2007-07-25 17:50 @784

Pero, ¿qué versión de WWW::Mechanize tienes? Si estás en Windows, ejecuta perl -MWWW::Mechanize -le "print $WWW::Mechanize::VERSION" y mira qué sale. La última versión es la 1.30.
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

AnteriorSiguiente

Volver a Avanzado

¿Quién está conectado?

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

cron