Доброго времени суток. Написал подделие быдлокодинга. Отбрасывает кривые мыла с пасом, если задан файл с хостами то выбираем ток их. Скрипт без файла с хостами отрабатывает секунд за 5, с ним часа 2 с половиной. Задаю 8 хостов. Code: use Getopt::Std; %options=(); getopts("i:o:h:",\%options); $innerFile = 'dump.txt'; $outFile = 'valid_mails.txt'; if ($options{i}) { $innerFile = $options{i}; } if ($options{o}) { $outFile = $options{o}; } if ($options{h}) { @hosts = (); %findingHosts = {}; $i = 0; open(HOSTS, $options{h}) or die "Can't find hosts file"; while (<HOSTS>) { chomp; $hosts[$i] = lc($_); $i++; } close(HOSTS); } open (FILE, $innerFile) or die "Input file wasn't found"; open (CHECKFILE, $innerFile); open (OUT, ">>", $outFile); MAIN: while(<FILE>) { chomp; $repeats = 0; $valid = valid($_); if (!$valid) { next MAIN; } CHECK: while(<CHECKFILE>) { chomp; if ($valid eq $_) { $repeats++; if ($repeats > 1) { next MAIN; } } } print OUT $valid . "\n"; } close(OUT); close(FILE); sub valid { my($str) = @_; if ($str =~ /^\s*?([a-zA-Z_0-9-\.]+)(@[a-zA-Z_0-9-\.]+):(.+)/) { if (@hosts) { while (<@hosts>) { if (lc($2) =~ /$_/) { return $str; } } return undef; } return $str; } return undef; } проверка на нужный хост. Code: if (@hosts) { while (<@hosts>) { if (lc($2) =~ /$_/) { return $str; } } Что у меня не так сделано в проверке, что оч увеличивается время? Какой ещё рефакторинг можно провести? Или же что можно конкретного почитать на эту тему?
Если я в jpg файле выделю некоторое количество null байтов, и вставлю туда код, он будет считываться?
Возникла проблема: берётся контент с сайта и надо распарсить его, но никак не могу натравить регулярку на кириллицу. И локали пробовал менять и прочее. Кто знает какой-нить стандартный метод решения или же предложит свой? Нагуглить никак ничего не могу. зы. АР стоит на винде.
Сайтец шлет данные через line based text data. Что это вообще такое и с чем его едят? Я на перле пишу скрипт, шлю обычным постом, но он кидает ключ-значение в общую кучу данных.
Доброго времени суток. Пишу парсер для lockerz.com, тупо не могу авторизоваться. Код: PHP: use IO::Socket; $handle = '[email protected]'; $password = 'coolPass'; $sock = IO::Socket::INET->new(PeerAddr => 'lockerz.com', PeerPort => 80, PeerProto => 'tcp', TimeOut => 10); print $sock "GET / HTTP/1.0\r\n". "Host: lockerz.com\r\n". "Accept-encoding: */*\r\n". "Accept: text/html\r\n". "User-Agent: Mozilla/9.0\r\n". "Connection: keep-alive\r\n\r\n"; sysread($sock ,$data, 1024576); $cookies = getCookies($data); open(P, '>data.html'); print P $data; close(P); $content = 'handle='.$handle.'&password='.$password; print $sock join("\r\n" => "POST /auth/login HTTP/1.1", "Host: lockerz.com", "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1", "Content-type: application/x-www-form-urlencoded", "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8", "Accept-Encoding: gzip, deflate", "Referer: http://lockerz.com/", "Cookie: $cookies", "Connection: Keep-Alive", "Content-length: ".length($content), "", $content); sysread($sock, $data1, 999999); open(P, '>data1.html'); print P $data1; close(P); sub getCookies { my $ans = @_[0]; @answer = ( $ans =~ m/Set-Cookie: ([^;]+?);.+?\r\n/g); for $cookie(@answer) { $cookies .= $cookie."; "; } return $cookies; } Запросы прописал прям как в сниффере (только второй, т.к. первый работает норм). Должно возвращать 302, не возвращает абсолютно ничего. В чем может быть ошибка? (Файлы data.html и data1.html содержат ответы сервера)
Возможно, проблема в отсутствии $sock->autoflush(1), данные print могут буферизоваться без этого перед отправкой + смотри сниффером что отправляет твой парсер - и сравнивай с запросами браузера, возможно ошибка в куках, регексп в getCookies не очень похож на правильный - скорее всего он выберет в @answer только первую куку из ответа, а не все. При наличии готовых модулей типа LWP::UserAgent + HTTP::Cookies проще через них сделать - свой велосипед на сокетах вряд ли будет чем-то лучше парсера на lwp. К тому же лучше сразу заранее подумать об использовании списка проксей для парсера.
red_joker 1)autoflush не дал результ 2)LWP::UserAgent и HTTP::Cookies дали тот же результат, поэтому я и решил свой велосипед сделать 3)Cookie парсит наура, это моя проверенная функция, во многих моих скриптах (парсит все куки, потому что стоит квантификатор g) если изменить код так (закрыть и пересоздать сокет): PHP: use IO::Socket; $handle = '[email protected]'; $password = 'coolPass'; $sock = IO::Socket::INET->new(PeerAddr => 'lockerz.com', PeerPort => 80, PeerProto => 'tcp', TimeOut => 10); print $sock "GET / HTTP/1.0\r\n". "Host: lockerz.com\r\n". "Accept-encoding: */*\r\n". "Accept: text/html\r\n". "User-Agent: Mozilla/9.0\r\n". "Connection: keep-alive\r\n\r\n"; sysread($sock ,$data, 1024576); $cookies = getCookies($data); open(P, '>data.html'); print P $data; close(P); close($sock); $sock = IO::Socket::INET->new(PeerAddr => 'lockerz.com', PeerPort => 80, PeerProto => 'tcp', TimeOut => 10); $content = 'handle='.$handle.'&password='.$password; print $sock join("\r\n" => "POST /auth/login HTTP/1.1", "Host: lockerz.com", "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1", "Content-type: application/x-www-form-urlencoded", "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8", "Accept-Encoding: gzip, deflate", "Referer: http://lockerz.com/", "Cookie: $cookies", "Connection: Keep-Alive", "Content-length: ".length($content), "", $content); sysread($sock, $data1, 999999); open(P, '>data1.html'); print P $data1; close(P); sub getCookies { my $ans = @_[0]; @answer = ( $ans =~ m/Set-Cookie: ([^;]+?);.+?\r\n/g); for $cookie(@answer) { $cookies .= $cookie."; "; } return $cookies; } то возвращает Code: HTTP/1.1 200 OK Server: nginx Date: Sun, 24 Jul 2011 17:53:46 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Encoding: gzip 202 ‹ UP: разобрался, всем спасибо UUP: нифига не разобрался, увидел Content-encoding: gzip и сделал Compress::Zlib::memGunzip($data1);, но там пусто как в первом варианте. снова там же, откуда и начал В User-Agent я что только не писал)) ему фиолетово
Еще причина может быть в кривом Useragent, "User-Agent: Mozilla/9.0\r\n" такого юзерагента в реале не существует (мозила до 5 версии + должна быть ось итд), многие фильтруют по нему ботов. Попробуй поставить что-то человеко-подобное, типа "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0"
пацаны, я в перлче полный нуб разьясните мне пожалуйста вот эти строки Code: if ($resp-> content=~ m/link button_register/msgi){ print "[BAD] $login:$pass\n"; wf($bad, "$login:$pass\n");} else { $resp = $ua->get("https://4game.ru/subscription/index.html")->content; my $bal = $2 if $resp =~ /class="text_green"(>)(\d{1,10})\s(.*)<\/span>/; print "[GOOD] $login:$pass:$bal\n"; wf($good, "$login:$pass:$bal\n");} Лучше в Icq, может у меня еще вопросики будут) 78055223
Perl, регулярки Привет всем, есть скрипт: Code: #!c:\usr\bin\perl.exe open(FILE,"<",'data.txt') || die "$!\n";# открываем файл для чтения open(OUT,"> out.txt"); while(<FILE>) { chomp; my ($C3) = $_ =~/Условие/; my ($D3) = $_ =~/Условие/; my ($sum) = $_ =~/Условие/; my ($G3) = $_ =~/Условие/; my ($etaj , $etajnost,) = $_ =~/Условие Условие/; my ($L3) = $_ =~/Условие/; my ($O3) = $_ =~/Условие/; print (OUT "C$i=$C3\nD$i=$D3\nE$i=$etaj\nF$i=$etajnost\nG$i=$G3\nH$i=\nI$i=\n\J$i=$sumn\nK$i=\nL$i=$L3\nM$i=\nN$i=Парсер\nO$i=$O3\n\n"); } Скрипт считает данные из файла data.txt, каждую строку он обрабатывает регулярками и пишет в файл out.txt Как мы видим есть переменная $i она должна после обработки регулярками и сохранения в файл становится на 1 больше (инкремент) не понмаю как можно это организовать, к примеру разберём первую строку:C$i=$C3 Дожно получится так С4=бла бла, при обработке следующей строки из файла С5=бла бла и.т.д.
О_о Code: #!c:\usr\bin\perl.exe open(FILE,"<",'data.txt') || die "$!\n";# открываем файл для чтения open(OUT,"> out.txt"); $i = 0; while(<FILE>) { chomp; my ($C3) = $_ =~/Условие/; my ($D3) = $_ =~/Условие/; my ($sum) = $_ =~/Условие/; my ($G3) = $_ =~/Условие/; my ($etaj , $etajnost,) = $_ =~/Условие Условие/; my ($L3) = $_ =~/Условие/; my ($O3) = $_ =~/Условие/; print (OUT "C$i=$C3\nD$i=$D3\nE$i=$etaj\nF$i=$etajnost\nG$i=$G 3\nH$i=\nI$i=\n\J$i=$sumn\nK$i=\nL$i=$L3\nM$i=\nN$ i=Парсер\nO$i=$O3\n\n"); $i++; }
Получился в общем такой скрипт: Code: use strict; my @words = ('891111111111', '892222222222', '893333333333'); open my $flh, "<", "data.txt"; while(my $line = <$flh>) { print $line unless grep {$line =~ /$_/} @words; } close $flh Помогите модифицировать скрипт что бы он читал данные из файла phone.txt в формате 81112223344 в массив добавлял и обрабатывал в формате: 8.*111.*222.*33.*44 для того чтобы если в базе есть строка с номером 8-111-222-33-44 8(111)222-33-44 для скрипта это было одно и тоже, заранее спасибо!
Code: $phone = '8-(100500)-11111-5555'; $phone =~ s/\D+//g; Удаляет из переменной $phone всё, кроме цифр...
Не могу авторизироваться Code: my $resp = $ua->post("http://love.mail.ru/ajax/login.phtml?XForm=Login", [ Referer=>'http://love.mail.ru/', - не знаю куда его пихать..вначало или в конец или вообще не сюда его нада реф этот.. clickUrl =>'http%3A%2F%2Flove.mail.ru%2Ftips%2F%3Ftip%3DLogin', target =>'', login_captcha =>'', login =>'my-mail-it', domain =>'mail.ru', password =>'my-pass-it', VAnketaId =>'0', RedirectBack =>'http%253A%252F%252Flove.mail.ru%252Findex.phtml%253F'])->as_string;
есть вопрос насчет ppm тоесть perl package module. Хотел юзать toolza.pl на ssl но пишет Thread 10 terminated abnormally: Can't locate object method "new" via package "IO::Socket::SSL" (perhaps you forgot to load "IO::Socket: :SSL"?) at C:\tools\toolza_last\toolza.pl line 206, <STDIN> line 3. Пробовал ActivePerl 5.8/5.10/5.14 с Net-SSLeay-1.22 и IO-Socket-SSL-1.21 но не пашет Если кто знает правильную конфигурацию с версиями то скажем плз