
17.04.2009, 20:13
|
|
Познавший АНТИЧАТ
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме: 18127311
Репутация:
1676
|
|
Код:
use warnings;
use IO::Socket;
$|=1;
my $login = "login";
my $domain = "mail.ru";
my $password = "pass";
my $answ1 = req('win.mail.ru', '/cgi-bin/auth', 'POST', "Login=$login&Domain=$domain&Password=$password", 0);
my $ck1 = collect($answ1);
$answ1 =~ /<HTML>http:\/\/win.mail.ru(.+?)<\/HTML>/;
req('win.mail.ru', $1, 'GET', 0, $ck1);
my $answ2 = req('win.mail.ru', '/cgi-bin/start?back=1', 'GET', 0, $ck1);
print $answ2;
sub collect
{
my $data = $_[0];
my $cookie = undef;
while($data =~ /Set-Cookie: (.+?)(;|\r)/igs)
{
$cookie .= $1."; ";
}
return $cookie;
}
sub req
{
my($host, $path, $type, $data, $cookies) = @_;
my $sock = new IO::Socket::INET(
PeerAddr => $host,
PeerPort => 80,
PeerProto => 'tcp',
TimeOut => 5);
my $request = "$type $path HTTP/1.0\n".
"Host: $host\n".
"Cookie: $cookies\n";
if($type eq "POST")
{
$request .= "Content-type: application/x-www-form-urlencoded\n".
"Content-Length: ".length($data)."\n\n".$data;
}
else
{
$request .= "\n";
}
print $sock $request;
my $answ = undef;
while(my $buf = <$sock>)
{
$answ .= $buf;
}
return $answ;
}
|
|
|