• Publicidad

De Python a Perl

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

De Python a Perl

Notapor jimr1984 » 2015-03-24 13:52 @619

Saludos... Buenas tardes. Por favor, necesito migrar este programa de Python a Perl,
que realice exactamente lo mismo.

Desconozco mucho Python.

Sintáxis: [ Descargar ] [ Ocultar ]
Using python Syntax Highlighting
  1. def check():
  2.  
  3.     global br
  4.     global passwords
  5.     try:
  6.        br = mechanize.Browser()
  7.        cj = cookielib.LWPCookieJar()
  8.        br.set_handle_robots(False)
  9.        br.set_handle_equiv(True)
  10.        br.set_handle_referer(True)
  11.        br.set_handle_redirect(True)
  12.        br.set_cookiejar(cj)
  13.        br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Si alguien puede ayudarme, por favor.
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Publicidad

Re: De Python a Perl

Notapor explorer » 2015-03-24 17:32 @772

¿Y qué hace este programa?
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: De Python a Perl

Notapor jimr1984 » 2015-03-25 09:01 @417

EMULAR EL BROWSER:

import mechanize
import cookielib

# Browser
br = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

# Want debugging messages?
#br.set_debug_http(True)
#br.set_debug_redirects(True)
#br.set_debug_responses(True)

# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]


Nota:
# Cookie Jar
instancion un objeto del tipo cookie
cj = cookielib.LWPCookieJar()
asigno la cookie a br.
br.set_cookiejar(cj)


Este código, ¿cómo puedo traducirlo en Perl? Es decir,
lo que YO entiendo es que captura la cookie y la utiliza en una petición, sea GET o POST.

Opciones que no sé en Perl a qué equivaldrían.

# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

Saludos...
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Re: De Python a Perl

Notapor explorer » 2015-03-25 09:31 @438

En Perl tienes WWW::Mechanize.

De hecho, la biblioteca de Python mechanize es una copia del módulo de Perl :)
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: De Python a Perl

Notapor jimr1984 » 2015-03-26 16:26 @726

Este código me gustaría comprenderlo y traducirlo a Perl.

cj = cookielib.LWPCookieJar()
asigno la cookie a br.
br.set_cookiejar(cj)

Dudas:

Cuando visitamos una web, generalmente éstas crean una cookie.

La intención es capturar la cookie y utilizarla en los GET, POST, ya que muchas veces en las cookies están los token y PHPSESSION.
Última edición por explorer el 2015-03-26 17:56 @789, editado 1 vez en total
Razón: codigo => código; gustaria => gustaría; perl => Perl; instencion => intención; estan => están;
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Re: De Python a Perl

Notapor explorer » 2015-03-26 18:10 @799

Creo que lo que hace ese código es pedir la jarra de galletas a la biblioteca LWP, que por defecto devolverá -supongo- el archivo en el disco que almacena las galletas. Y luego la asigna al objeto mechanize.

El caso es que todo esto lo hace de forma automática WWW::Mechanize, por lo que en la mayor parte de las ocasiones, no es necesario preocuparse por las galletas...

Yo creo que siempre que he usado WWW::Mechanize, nunca me he preocupado por ese tema. Y eso que he entrado en web con sesiones y demás.
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: De Python a Perl

Notapor jimr1984 » 2015-03-27 14:27 @644

La idea es poder registrarse en Facebook.

Intento que el script se registre con mi cuenta.

En Python algo similar. Por eso quiero hacerlo en Perl utilizando mechanize.

En la me pide buzón de correo y clave y tengo mis datos.

Intenté de esta manera pero NO funciona:

#!C:/Perl/bin/perl.exe

use strict;
use LWP::UserAgent;
use HTTP::Request;
use WWW::UserAgent::Random;



my $agente = rand_ua("browsers");

#definimos las entradas email,clave
my ($dfb)=@ARGV;
my ($cla)=@ARGV;
chop($dfb);
chop($cla);

if (not defined $dfb,$cla)
{

print "parametros no definidos";

}
#continuamos la ejecucion:

#definimos un objeto del tipo UserAgent llamdo obj_ua
my $obj_ua = LWP::UserAgent->new();
$obj_ua->timeout(20);
$obj_ua->agent($agente);

my $url = "https://www.facebook.com/login.php?login_attempt=1";
chop ($url);

#my $data = "lsd=AVpgD42H&display=&enable_profile_selector=&legacy_return=1&profile_selector_ids=&trynum=1&timezone=240&lgnrnd=092751_EV7b&lgnjs=1427214493&email=mi_email%40latinmail.com&pass=Passw00s3drd23&persistent=1&default_persistent=1&qsstamp=W1tbNywyMyw4NSwxMjAsMTM4LDE0OSwxNTMsMTc2LDE5OCwyMDcsMjA4LDIxMCwyMTYsMjE5LDIzMCwyMzIsMjM0LDI0MCwyNDIsMjUwLDI2OCwyNzAsMjc1LDI3NywyNzgsMjg0LDI5NSwzMzUsMzYwLDM4Niw0MDIsNDA0LDQ2Niw0NzksNDg1LDQ4Niw0ODcsNDkxLDUxNiw1NjUsNTgyLDcwMF1dLCJBWm5rbTQyUVpzekFHcl9oRmd0U2pWeDhrRkZfS0tmRGJNQ1RtS3pwMlU0VFZoc0Z6bEZJV3ZuVE9tdzVEWlRkUDRlQXlvQ21JMno4WHhBXzlGQVIzNWJKZ25uSF9GMjRpNDJ5UDBmbURvR3FlNmIwVXk0LTNPbU8zYVV4T3dRYk5HVXpHVmp0aTl0X0JVZnhxcmJfc3ZRbklRX1Q1bHR1elNjMU1CYmgwU0N2bUR5cGtYd1RmWjFpNjFSaWViUGdIaUFCVnM3ODlGazBTV2tMUjVYQktPX1JhTHl4cGZVYXB3aW92T1M3OExwQ3hPVlN1cVgzUmliZ0x0OGlrdmZCSm9vIl0%3D";
my $data = "email=mi_email%40hotmail.com&pass=Passw00s3drd23";
chop($data);


my $request = HTTP::Request->new(POST => $url);
$request->content_type('application/x-www-form-urlencoded');
$request->content($data);

my $response = $obj_ua->request($request);
my $content = $response->content();

print $content;
print $response->code();

Se supone que debería darme un 200 (Ok) en caso de que estuviese registrado si los datos son reales.

Saludos...
Última edición por explorer el 2015-03-27 14:52 @661, editado 1 vez en total
Razón: loguear => registrarse; intente => Intenté; deberia => debería;
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Re: De Python a Perl

Notapor explorer » 2015-03-27 15:20 @680

Esto... Creo que lo complicas demasiado...

En CPAN hay casi 100 módulos dedicados a Facebook.

Facebook-Graph es uno de los más modernos. (Tutorial, en inglés)

Como dicen aquí, tú no querrás registrarte directamente en Facebook, ya que Facebook puede cambiarte la página en cualquier momento, o ponerte un código JavaScript que te lo impida, o impedir todo acceso desde un programa que use LWP.

De todas maneras, sí que existen ejemplos de uso de WWW::Mechanize para entrar. O usando LWP::UserAgent. Pero... son ejemplos de hace muchos años, así que lo más seguro es que ya no funcionen. Lo mejor es usar la API de Facebook, con alguna de las distribuciones modernas de Facebook en CPAN.

Una vez que tengas registrada la aplicación en Facebook, podrás entrar muy fácilmente.

Si lo que quieres es sacar información básica (los "me gusta" o lo compartido), con URL::Social, te vale. Y no solo para Facebook.
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: De Python a Perl

Notapor jimr1984 » 2015-04-02 08:25 @392

Ok, estimado, muchas gracias. Ya logré mi objetivo.

Muchas gracias por la ayuda prestada.

Saludos...
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341


Volver a Web

¿Quién está conectado?

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