E ae galera beleza? nesse tutorial vamos brincar com o modulo WWW::Mechanize do perl, esse modulo nos permite fazer determinadas requisições em sites, manipular parametros e metodos passados, manipular formularios daquela pagina, manipular os cookies e headers da requisição e etc. Com esse modulo é bastante simples o desenvolvimento de bots, scripts voltados a coleta ou dump de informações em sites, ou simplesmente automatizar um determinado envio de formulario pela web. Normalmente o modulo não vem instalado por padrão, uma das formas de instalar ele é utilizando o CPAN
com o modulo instalado basta a gente declarar ele no nosso script para começar
agora podemos instanciar um objeto desse modulo, no caso WWW::Mechanize
com o objeto instanciado, é possivel fazer uma simples requisição GET em um determinado site usando o metodo get e passando a url como argumeto
para exibir a resposta usamos o metodo content
usando regex podemos recortar trechos especificos e montar a saida como a gente desejar
é possivel retornar o codigo de status usando o metodo status (passamos o autocheck para o objeto para continuar executando mesmo com o erro)
com o metodo uri retornamos a url atual
com o metodo links é possivel retornar todos os links daquela pagina como uma array, podemos utilizar o parametro url para especificar as urls dos links e o parametro text para os textos naqueles links
o metodo images retornamos as imagens da pagina
para retornar informações dos formularios naquela pagina usamos o metodo forms, podemos usar alguns parametros como o action para onde sera redirecionado aquele formulario, o method sendo o metodo usado
podemos usar o metodo inputs no exemplo anterior para retornar todos os inputs de cada formulario, com o paremetro type retornamos o tipo de input (text, password, hidden, button e etc), com o parametro name retornamos o name que sera passado, com o parametro text o texto no input, com o parametro value o valor pre-definido dele
o submit_form é um dos metodos para preencher o formulario e depois enviar ele, para a gente usar esse metodo fazemos o request na pagina que tem esse formulario e depois usamos o metodo passando os parametros, sendo o form_number seguido da ordem daquele formulario e fields com os campos do formulario (no caso os inputs)
o exemplo anterior tambem seria possivel via get direto pela propria url
tambem podemos usar o submit_form para enviar via POST ou usar o proprio metodo post (o metodo post é bem interessante a gente aprender a fazer ja que boa parte dos logins são feitos por ele)
podemos salvar a pagina normalmente abrindo um arquivo e escrevendo a requisição nele (podemos salvar qualquer tipo de arquivo não apenas as pagias html)
uma forma mais simples de salvar é usando o metodo save_content
usando o metodo agent podemos especificar um User-Agent
é possivel utilizar proxy bastando atribuir ele ao metodo proxy
bom galera isso é apenas um pequeno tutorial desse grande modulo, existem muitas outras funcionalidade que podem ser feitas com esse modulo \o
by kodo no kami
- Código:
sudo perl -MCPAN -e "install WWW::Mechanize"
com o modulo instalado basta a gente declarar ele no nosso script para começar
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
agora podemos instanciar um objeto desse modulo, no caso WWW::Mechanize
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
com o objeto instanciado, é possivel fazer uma simples requisição GET em um determinado site usando o metodo get e passando a url como argumeto
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
$kodo->get("http://eofclub.in/");
para exibir a resposta usamos o metodo content
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
$kodo->get("http://eofclub.in/");
print $kodo->content;
usando regex podemos recortar trechos especificos e montar a saida como a gente desejar
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
$kodo->get("https://steamcommunity.com/id/$ARGV[0]");
my @mensagem = $kodo->content =~ /meta name="Description" content="(.*?)"/si;
my @amigos = $kodo->content =~ /friendBlockContent">(.*?)<br>/gis;
my @online = $kodo->content =~ />Last Online (.*?)</si;
print "[--- STEAM ---]\nsteam id: $ARGV[0]\n" .
"online: $online[0]\n\n" .
"[--- Mensagem Perfil ---] \n$mensagem[0]" .
"\n\n[--- Amigos ---] \n";
foreach my $a(@amigos){
$a =~ s/\n//gs;
$a =~ s/\x09//gs;
print $a . "\n";
}
é possivel retornar o codigo de status usando o metodo status (passamos o autocheck para o objeto para continuar executando mesmo com o erro)
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize(autocheck=>0);
$kodo->get("http://google.com..br/");
print "codigo: " . $kodo->status . "\n";
if($kodo->status == 200){
print "tudo sussa!!! \n";
}
else{
print "vish deu ruim \n";
}
com o metodo uri retornamos a url atual
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize(autocheck=>0);
$kodo->get("https://dolarhoje.com/bitcoin-hoje/");
print $kodo->uri . "\n";
com o metodo links é possivel retornar todos os links daquela pagina como uma array, podemos utilizar o parametro url para especificar as urls dos links e o parametro text para os textos naqueles links
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
$kodo->get("https://pt.wikipedia.org/wiki/Perl");
my @links = $kodo->links;
foreach my $l(@links){
print $l->text . "\n";
print $l->url . "\n";
print "=========================\n";
}
o metodo images retornamos as imagens da pagina
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
$kodo->get("https://www.facebook.com/forumeof");
my @img = $kodo->images;
foreach my $i(@img){
print $i->url . "\n\n";
}
para retornar informações dos formularios naquela pagina usamos o metodo forms, podemos usar alguns parametros como o action para onde sera redirecionado aquele formulario, o method sendo o metodo usado
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
$kodo->get("https://youtube.com");
my @formulario = $kodo->forms;
foreach my $f(@formulario){
print $f->action . "\n";
print $f->method . "\n";
print "------------------\n";
}
podemos usar o metodo inputs no exemplo anterior para retornar todos os inputs de cada formulario, com o paremetro type retornamos o tipo de input (text, password, hidden, button e etc), com o parametro name retornamos o name que sera passado, com o parametro text o texto no input, com o parametro value o valor pre-definido dele
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
$kodo->get("https://youtube.com");
my @formulario = $kodo->forms;
my @inputs;
my $i;
foreach my $f(@formulario){
print $f->method . ": " . $f->action . "\n";
print . "\n\n";
@inputs = $f->inputs;
foreach $i(@inputs){
print "----------\n";
print "type: " . $i->type . "\n";
print "name: " . $i->name . "\n";
print "text: " . $i->name . "\n";
print "value: " . $i->value . "\n";
print "----------\n";
}
print "\n===========================\n";
}
o submit_form é um dos metodos para preencher o formulario e depois enviar ele, para a gente usar esse metodo fazemos o request na pagina que tem esse formulario e depois usamos o metodo passando os parametros, sendo o form_number seguido da ordem daquele formulario e fields com os campos do formulario (no caso os inputs)
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
$kodo->get("https://youtube.com");
$kodo->submit_form(
form_number => 2,
fields => {
search_query => "kodo no kami"
}
);
print $kodo->uri . "\n";
o exemplo anterior tambem seria possivel via get direto pela propria url
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
$kodo->get("https://www.youtube.com/results?search_query=kodo+no+kami");
tambem podemos usar o submit_form para enviar via POST ou usar o proprio metodo post (o metodo post é bem interessante a gente aprender a fazer ja que boa parte dos logins são feitos por ele)
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
#autentica no meu roteador
$kodo->post("http://192.168.1.254/login.cgi",[username=>"admin",password=>"minhawaifu","submit.htm?login.htm"=>"send"]);
#pula para pagina principal depois de logado
$kodo->get("index.htm")
print $kodo->content;
podemos salvar a pagina normalmente abrindo um arquivo e escrevendo a requisição nele (podemos salvar qualquer tipo de arquivo não apenas as pagias html)
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
$kodo->get("https://eofclub.in/download/EOFbookAsm.pdf");
open(KARQ,">asm.pdf");
print KARQ $kodo->content;
close(KARQ);
uma forma mais simples de salvar é usando o metodo save_content
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
$kodo->get("https://eofclub.in/download/EOFbookAsm.pdf");
$kodo->save_content("asm.pdf");
usando o metodo agent podemos especificar um User-Agent
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
$kodo->agent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36");
$kodo->get("https://google.com.br");
é possivel utilizar proxy bastando atribuir ele ao metodo proxy
- Código:
#!/usr/bin/perl
use WWW::Mechanize;
my $kodo = new WWW::Mechanize;
$kodo->proxy(["http","https"],"http://108.61.186.207:8080");
$kodo->get("http://ip-api.com/json/");
print $kodo->content . "\n";
bom galera isso é apenas um pequeno tutorial desse grande modulo, existem muitas outras funcionalidade que podem ser feitas com esse modulo \o
by kodo no kami