Página 1 de 1

De Python a Perl

NotaPublicado: 2015-03-24 13:52 @619
por jimr1984
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.004 segundos, usando GeSHi 1.0.8.4

Si alguien puede ayudarme, por favor.

Re: De Python a Perl

NotaPublicado: 2015-03-24 17:32 @772
por explorer
¿Y qué hace este programa?

Re: De Python a Perl

NotaPublicado: 2015-03-25 09:01 @417
por jimr1984
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...

Re: De Python a Perl

NotaPublicado: 2015-03-25 09:31 @438
por explorer
En Perl tienes WWW::Mechanize.

De hecho, la biblioteca de Python mechanize es una copia del módulo de Perl :)

Re: De Python a Perl

NotaPublicado: 2015-03-26 16:26 @726
por jimr1984
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.

Re: De Python a Perl

NotaPublicado: 2015-03-26 18:10 @799
por explorer
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.

Re: De Python a Perl

NotaPublicado: 2015-03-27 14:27 @644
por jimr1984
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...

Re: De Python a Perl

NotaPublicado: 2015-03-27 15:20 @680
por explorer
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.

Re: De Python a Perl

NotaPublicado: 2015-04-02 08:25 @392
por jimr1984
Ok, estimado, muchas gracias. Ya logré mi objetivo.

Muchas gracias por la ayuda prestada.

Saludos...