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

  #7  
Старый 08.11.2009, 15:38
winflip
Познающий
Регистрация: 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..
 
Ответить с цитированием