
08.11.2009, 15:38
|
|
Познающий
Регистрация: 13.05.2009
Сообщений: 40
Провел на форуме: 91842
Репутация:
1
|
|
Что я загадками говорю??))) Вот код:
Код:
package liex::API;
use strict;
use Carp qw(croak carp);
use IO::Socket::INET;
use Encode qw(from_to);
our $VESRION = '0.9';
our @EXPORT = qw();
our @EXPORT_OK = qw();
sub reg {
my ($class, %cnf) = @_;
my $page;
my %self = ('tech' => 0,
'cookie' => "");
Carp::croak("Options to liex::API should be key/value pairs, not hash reference") if ref($_[1]) eq 'HASH';
my $name = delete $cnf{'name'};
my $username = delete $cnf{'username'};
my $password = delete $cnf{'password'};
my $e_mail = delete $cnf{'e_mail'};
my $wmz = delete $cnf{'wmz'};
my $webmaster = delete $cnf{'webmaster'} || 1;
my $reflink = delete $cnf{'reflink'} || undef;
$reflink =~ m/http\:\/\/(www\.)?liex\.ru\/([\d\w\_\-\.]+)/i;
my $link = $2;
if(!$link){
$link= "";
}
my $socket = IO::Socket::INET->new("www.liex.ru:80");
print $socket "GET /".$link." HTTP/1.0\n
Host: liex.ru\n
User-Agent: liexAPI/0.9\n
Accept: text/html\n
Connection: close\n\n";
while(my $get = <$socket>){
$page .= $get;
}
if(is_tech($page)){
$self{'tech'} = 1;
} else {
my %cookies = get_cookies($page);
$socket = IO::Socket::INET->new("www.liex.ru:80");
print %cookies;
my $boundary = "Asrf456BGe4h";
my $data = "\n";
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"name\"\n\n";
$data .= "$name\n";
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"login\"\n\n";
$data .= "$username\n";
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"email\"\n\n";
$data .= "$e_mail\n";
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"password\"\n\n";
$data .= "$password\n";
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"password2\"\n\n";
$data .= "$password\n";
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"wmz\"\n\n";
$data .= "$wmz\n";
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"defaultInterface\"\n\n";
$data .= "$webmaster\n";
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"Submit2_x\"\n\n";
$data .= int(rand(20)/1)."\n";
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"Submit2_y\"\n\n";
$data .= int(rand(25)/1)."\n";
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"term\"\n\n";
$data .= "on\n";
$data .= "--$boundary--\n\n";
$page = "";
print $socket "POST /userAction?action=registerUser HTTP/1.0\n".
"Host: www.liex.ru\n".
"Referer: http://www.liex.ru/Registration.jsp\n".
"User-Agent: liexAPI/0.9\n".
"Cookie: Referrer=".$cookies{'Referral'}."; JSESSIONID=".$cookies{'JSESSIONID'}.";\n".
"Content-Type: multipart/form-data; boundary=\"".$boundary."\"\n".
"Content-Length: ".length($data)."\n".
"Connection: keep-alive\n".
"Keep-Alive: 300\n\n".$data;
while(my $get = <$socket>){
$page .= $get;
}
if(is_tech($page)){
$self{'tech'} = 1;
} else {
%cookies = get_cookies($page);
my $cookies;
foreach my $cookie(keys %cookies){
$cookies .= $cookie."=".$cookies{$cookie}."; ";
}
$self{'cookie'} = $cookies;
}
}
my $self = bless(\%self, $class);
return $self;
}
sub get_cookies {
my $_ = $_[0];
my %list = m/set-cookie:[\s]?([\w]+)=([\w]+)/ig;
return %list;
}
sub is_tech {
my $page = $_[0];
from_to($page, 'cp1251', 'utf8');
if($page =~ m/технические работы/i){
return 1;
} else {
return 0;
}
}
1;
И код, использующий этот класс:
Код:
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
use CGI::Carp qw(fatalsToBrowser);
use strict;
use liex::API;
use CGI qw(:standard);
my $object = liex::API->reg(name => "Gena",
username => "testliex",
password => "123456543",
e_mail => 'gena@yandex.ru',
wmz => "Z123456789012",
webmaster => 1,
reflink => "http://liex.ru/winflip.htm");
Последний раз редактировалось winflip; 08.11.2009 в 15:42..
|
|
|