Forum Webscript.Ru
Программирование => Perl => Тема начата: koder20005 от 04 Мая 2007, 22:33:23
-
Как настроить LWP:UserAgent
так, чтобы на сайте остался след не скрипта посявшего сайт, а пользователя через браузер??
-
какой именно след? ip?
-
Referer, и т.д.
-
что непонятно в perldoc LWP::UserAgent ?
-
нет мне нужны значения, которые похожи на пользователей.
Типо этого
Opera/9.20 (Windows NT 5.1; U; ru)
-
sort -u /var/log/httpd/agent_log
-
Выводит содержимое всего файла, а не Refer.
-
1. referer а не refer
2. user-agent, "Opera/9.20 (Windows NT 5.1; U; ru)" в referer быть не может.
-
А мне нужно, чтобы была инфорация только откуда пришли..
-
обясните подробнее, что надо
-
213.141.137.138 - - [08/May/2007:01:46:11 +0400] "GET / HTTP/1.1" 200 2529 "http://www.rambler.ru/srch?words=%F6%E5%ED%F2%F0+%F1%E0%E4%EE%E2%EE%E4%F1%F2%E2%E0&old_q=%F1%E0%E4%EE%E2%EE%E4%ED%E8%F7%E8%F1%EA%E8%E9+%F6%E5%ED%F2%F0&btnG=%CD%E0%E9%F2%E8%21" "Opera/9.10 (Windows NT 5.1; U; ru)"
Это у меня находится в файле, мне надо извлекать
такие вот строки
http://www.rambler.ru/srch?words=%F6%E5%ED%F2%F0+%F1%E0%E4%EE%E2%EE%E4%F1%F2%E2%E0&old_q=%F1%E0%E4%EE%E2%EE%E4%ED%E8%F7%E8%F1%EA%E8%E9+%F6%E5%ED%F2%F0&btnG=%CD%E0%E9%F2%E8%21
-
\\S+\\s+\\S+\\s+\\S+\\s+.{28}\\s+"[^"]*"\\s+\\d+\\s+\\d+\\s+"([^"]+)"
-
Я использую use Apache::LogRegex;
почему то это не прокатывает
eval { $lr = Apache::LogRegex->new("%h %l %u %t \\"%r\\" %>s %b \\"%{Referer}i\\" \\"%{User-Agent}i\\"") };
-
print $lr->regex и сравните
-
Вот что выдало (?-xism:^(\\S*) (\\S*) (\\S*) (\\[[^\\]]+\\]) (\\S*) (\\S*) (\\S*) (\\S*) (\\S*) (\\S*) (\\S*)$)
А как подогнать...
-
вам шашечки, или ...?
perldoc -m Apache::LogRegex
-
Блин посоветуй компонент, чтобы парсить access_log
-
регулярное выражение написал -- что еше надо?
-
btw, если посмотреть в исходник, то хватит q|...| в new
-
Все ок подошло..Спасибо..
-
Мне кажется здесь не правильно
\\S+\\s+\\S+\\s+\\S+\\s+.{28}\\s+"[^"]*"\\s+\\d+\\s+\\d+\\s+"([^"]+)"
-
# perl -de0
DB<1> $a = q|213.141.137.138 - - [08/May/2007:01:46:11 +0400] "GET / HTTP/1.1" 200 2529 "http://www.rambler.ru/srch? words=%F6%E5%ED%F2%F0+%F1%E0%E4%EE%E2%EE%E4%F1%F2%E2%E0& old_q=%F1%E0%E4%EE%E2%EE%E4%ED%E8%F7%E8%F1%EA%E8%E9+%F6%E5%ED%F2%F0&btnG=%CD%E0%E9%F2%E8%21" "Opera/9.10 (Windows NT 5.1; U; ru)|
DB<2> p $a
213.141.137.138 - - [08/May/2007:01:46:11 +0400] "GET / HTTP/1.1" 200 2529 "http://www.rambler.ru/srch? words=%F6%E5%ED%F2%F0+%F1%E0%E4%EE%E2%EE%E4%F1%F2%E2%E0& old_q=%F1%E0%E4%EE%E2%EE%E4%ED%E8%F7%E8%F1%EA%E8%E9+%F6%E5%ED%F2%F0&btnG=%CD%E0%E9%F2%E8%21" "Opera/9.10 (Windows NT 5.1; U; ru)
DB<3> p $a =~ m#\\S+\\s+\\S+\\s+\\S+\\s+.{28}\\s+"[^"]*"\\s+\\d+\\s+\\d+\\s+"([^"]+)"#
http://www.rambler.ru/srch? words=%F6%E5%ED%F2%F0+%F1%E0%E4%EE%E2%EE%E4%F1%F2%E2%E0& old_q=%F1%E0%E4%EE%E2%EE%E4%ED%E8%F7%E8%F1%EA%E8%E9+%F6%E5%ED%F2%F0&btnG=%CD%E0%E9%F2%E8%21
DB<4>
-
может вместо этого .*?
-
не расскажите, что это означает в данном контексте?
и почему мое выражение вас не устраивает?
-
.{28} Пропустить 28 символов, но там может быть больше, а .*?
это все остально до конца строки т.е. useragent.
Вот что получилось, нормально
open(F1,"D:/access_log") or die $!;
while ($line = ) {
if ($line =~m/\\S+ \\S+ \\S+ .*? "[^"]*" \\d+ \\d+ "([^"]+)"/) {
$ref = $1;
}
}
close(F1) or die $!;
-
больше, чем в "[08/May/2007:01:46:11 +0400]" ?
это где такое случается?
-
"[08/September/2007:01:46:11 +0400]"
-
это где такое случилось?
-
А разве не случится в будущем?
-
с какой вероятностью?
-
с вероятностью через 4 месяца.
-
ну если кто настраивает в %t свой формат -- он сам себе злобный буратино.
-
Этоже почему?