Если кто сталкивался подскажите пожалуйста - хочу в написать CGI(Perl)-скрипт при открытии браузером, который бы с определённой периодичностью загрузал бы по очереди несколько web-страниц. Пробовал модуль LWP::Simple он все указанные мной страницы загружает в одно окно браузера и останавливается, т.е. все пять страниц размещаются в одном окне, а мне нужно симитировать пользователя который ходит поочерёдно по пяти страницам с определённым периодом времени. Заранее благодарю.
То есть, одна страница должна сменять другую через некоторое время?
Тогда организовать массив нужных ссылок, в заголовки вставлять refresh, в урле как параметр передавать индекс необходимого элемента массива. Что-то типа@urls=(
"http://site.ru/page1", "http://site.ru/page2",
"http://site.ru/page3", "http://site.ru/page4"
);
# сколько секунд показывать страницу пользователю
$timeout = 5;
# получаем индекс запрошенной страницы (0,1,2 или 3)
$current_url_num = $ENV{QUERY_STRING};
# что грузить в следующий раз (мотаем по кругу)
$next_url_num = $current_url_num == scalar(@urls) ? 0 : $current_url_num++;
# формируем новую ссылку
$next_url = $ENV{SCRIPT_NAME} .'?'. $next_url_num;print "Refresh: $timeout; url=$urls[$next_url_num]\n";
print "Pragma: no-cache\n"; # ибо нефиг
print "Cache-Control: no-cache\n"; # эти
print "Expires: Fri, 30 Oct 1998 14:19:41 GMT\n" # документы кэшировать
print "Content-Type: text/html\n";
print "\n";get_page_and_print_it( $urls[$current_url_num] );
sub get_page_and_print_it($) {
my $url = shift;
# закачка и печать документа $url
# ...
}__END__
писалось быстро, без проверок, чтобы просто показать идею
спасибо огромное запомощь,
только вот получается такая штука - при открытии браузером делается пауза 5 сек потом идём к первому элементу массива (первый url) соответственно управление передаётся этой странице и основной скрипт уже теряет управление, а загрузившаяся страница не знает (да и не должна знать) что нужно через пять секунд грузить другую. Вобщем в итоге - грузиться перваяя страница и на этом всё останавливается.
нет.
Допустим, наш скрипт доступен по http://myownsite.ru/cgi-bin/rollover.cgi
Строка
$next_url = $ENV{SCRIPT_NAME} .'?'. $next_url_num;
сформирует url вида /cgi-bin/rollover.cgi?1
число на конце - индекс эл-та массива, где хранится нужный урл. То есть будет запрошен тот же rollover.cgi, но уже с другим параметром. А уж rollover в функции get_page_and_print_it должен скачать урл, находящийся в массиве под индексом $current_url_num, убрать из ответа http`шные заголовки и отправить страницу в stdout (print`ом ). Заголовки мы подставляем свои перед вызовом функции, так как мы хотим иметь рефреш.Кстати, чтобы первый раз нормально отработало, надо бы поменять
$current_url_num = $ENV{QUERY_STRING};
на
$current_url_num = $ENV{QUERY_STRING} || 0;
при отсутствии параметра в запросе принять, что пользователь хочет первую по списку страницуКороче, нечто типа этого. Вызывается один и тот же скрипт, но с разными параметрами. На основе полученного параметра скрипт решает, какую страницу грузить.
>Вызывается один и тот же скрипт, но с
>разными параметрами. На основе полученного параметра скрипт решает, какую страницу грузить
подставляя свои заголовки, где указан рефреш через энцать секунд на самого себя
Всё! Понял Вашу идею, наверное так длжно работать, сейчас буду доводить до ума :), кстати у Вас завидный стиль программирования я пока так не умею или не привык. Спасибо большое за помощь!
>кстати у Вас завидный стиль программирования
спасибо за комплимент, если честно, никогда так не думал :)
Просто стараюсь сначала сформулировать порядок действий на человеческом языке, а потом описать то же самое в терминах машинного языка, начиная с самого высокого уровня абстракции и постепенно спускаясь вглубь, описывая более детальные вещи.
Приходит со временем, после того, как пару раз попадется непонятный запутанный код без комментариев и ты долго материшь кодера, а потом оказывается, что это писал ты сам с год назад.>Спасибо большое за помощь!
а пожалуйста :)
В общем получилось так (за простоватый стиль прошу простить - учусь)use LWP::Simple;
@urls=("http://www.server.ru/index1.html",
"http://www.server.ru/index2.html",
"http://www.server.ru/index3.html",
"http://www.server.ru/index4.html");$x=scalar(@urls)-1;
# сколько секунд показывать страницу пользователю
$timeout = 5;
# получаем индекс запрошенной страницы (0,1,2 или 3)
$current_url_num = $ENV{QUERY_STRING} || 0;
# что грузить в следующий раз (мотаем по кругу)
if ($current_url_num>=$x) {$current_url_num="-1";}
$current_url_num = $current_url_num+1;
$next_url_num=$current_url_num;
# формируем новую ссылку
$next_url = $ENV{SCRIPT_NAME} ."?".$next_url_num;print "Refresh: $timeout; url=$next_url\n";
print "Pragma: no-cache\n"; # ибо нефиг
print "Cache-Control: no-cache\n"; # эти
print "Expires: Fri, 30 Oct 1998 14:19:41 GMT\n"; # документы кэшировать
print "Content-Type: text/html\n\n";$content = get($urls[$next_url_num]); # получаем док по ссылке
die "Couldn't get it!" unless defined $content;
print $content; # и выводим на нашу страничку