MAIL.ru авторизация на perl
Здравствуйте, подскажите в чем проблема.
Недавно начал изучать перл, и задался целью написать скрипт авторизации на MAIL.ru
вот код
Код:
#!/usr/bin/perl
use IO::Socket;
use strict;
my $login = "Логин";
my $domain = "mail.ru";
my $password = "пароль";
#STEP 1
my $hostname = "win.mail.ru";
my $path = "/cgi-bin/login";
my $sock = new IO::Socket::INET(PeerAddr =>$hostname,PeerPort => 80,PeerProto => 'tcp',TimeOut => 5);
my $headers = "GET $path HTTP/1.0\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Connection: keep-alive\r\n\r\n";
my $answ;
print $sock $headers;
sysread( $sock, $answ, 4096);
my $mrcu = '';
$answ=~ s/\w{28}/$mrcu=$&/gime;
close $sock;
#STEP 2
$path = "/cgi-bin/auth";
$sock = new IO::Socket::INET(PeerAddr =>$hostname,PeerPort => 80,PeerProto => 'tcp',TimeOut => 5);
my $data = "page=&post=&login_from=&Login=$login&Domain=$domain&Password=$password&\r\n\r\n";
$headers = "POST $path HTTP/1.0\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".length($data)."\r\n";
$headers .= "Cookie: mrcu=$mrcu\r\n";
$headers .= "Connection: Close\r\n\r\n";
print $sock ($headers.$data);
sysread( $sock, my $answ, 4096);
my ($mpop, $t, $location) = '';
$answ=~ s/\w{10}\:\S*/$mpop=$&/gime;chop $mpop;$answ=~ s/\w{10}\:\S*//gim;
$answ=~ s/(\w{88})/$t=$&/gime;
$mpop=~ s/\:\S{98}/$location=$&/gime;
$location=~ s/\://gim;$location="http://win.mail.ru/cgi-bin/checkcookie?id=".$location;
close $sock;
#STEP 3
$sock = new IO::Socket::INET(PeerAddr =>$hostname,PeerPort => 80,PeerProto => 'tcp',TimeOut => 5);
$headers = "GET $location HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Cookie: mrcu=$mrcu; Mpop=$mpop; t=$t]\r\n";
$headers .= "Connection: keep-alive\r\n\r\n";
print $sock ($headers.$data);
sysread( $sock, my $answ, 4096);
close $sock;
#STEP 4
$hostname = "win.mail.ru";
$path = "http://win.mail.ru/cgi-bin/start?back=1";
$sock = new IO::Socket::INET(PeerAddr =>$hostname,PeerPort => 80,PeerProto => 'tcp',TimeOut => 20);
$headers = "GET $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8\r\n";
$headers .= "Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\n";
$headers .= "Cookie: mrcu=$mrcu; Mpop=$mpop; t=$t\r\n";
$headers .= "Connection: keep-alive\r\n\r\n";
print $sock ($headers.$data);
sysread( $sock, my $main, 80000);
print $main;
Авторизация, как я понял, проходит в 4 этапа:
1)при входе на сайт нам дают "печеньку" $mrcu
2)потом идет авторизация, и нам дают еще $mpop и $t
3)идет редирект на проверку кукисов
4)сам вход на мейл
проблема заключаеться в том, что после 4го шага скрипт не грузит полность страничку, а только заголовки+1 ява скрипт
подскажите что не так и поправьте код пожалуйста
|