Показать сообщение отдельно

  #5  
Старый 17.04.2009, 20:13
Kaimi
Познавший АНТИЧАТ
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме:
18127311

Репутация: 1676


Отправить сообщение для Kaimi с помощью ICQ
По умолчанию

Код:
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;
}
 
Ответить с цитированием