Для этого есть много модулей... тот же LWP, но в некотором плане они слишком "мощные". Хочется написать свою "универсальную" функцию, чтобы, например, записывать в лог типы браузеров. Строки 'HTTP_USER_AGENT' различных типов браузеров можно посмотреть здесь http://www.zytrax.com/tech/web/browser_ids.htmВот что у меня получилось: | Код | sub GetUserAgent { # спасибо Lee Semel - HTTP::BrowserDetect # my $user_agent = lc($ENV{'HTTP_USER_AGENT'}); my( $browser, $version ); # проверка для MSIE if( index($user_agent,"compatible;") != -1 && index($user_agent,"webtv") == -1 && index($user_agent,"opera") == -1 && index($user_agent,"msie") != -1) { # похоже это MS IE ($version) = ($user_agent =~ / compatible; \s* \w* # имя браузера [\s|\/] # разделитель имени и версии ([^;]*) # все, что до ';' принимаем за версию браузера ; /x); $browser = 'MSIE'; } # проверка для браузеров, использующих gecko if( index($user_agent,"gecko") != -1 ) { # firefox if( $user_agent =~ /(firefox|firebird|phoenix)/ ) { ($browser, $version) = ($user_agent =~ /(firefox|firebird|phoenix)\/([\.\d]*)/); } # netscape else { if( index($user_agent, "netscape") != -1 || index($user_agent, "nsb") != -1 ) { ($version) = ($user_agent =~ /\/([\.\d]*)/); $browser = 'Netscape'; } else { # если это ни firefox ни netscape, но с gecko, то, наверное, это Mozilla if( index($user_agent, "mozilla") != -1 ) { ($version) = ($user_agent =~ /\/([\.\d]*)/); $browser = 'Mozilla'; } } } } # Самый "интересный" браузер Opera if( index($user_agent,"opera") != -1 ) { ($version) = ($user_agent =~ /opera[\/\s]([\.\d]*)/); $browser = 'Opera'; } # Safari ( браузер MAC OS ) if( index($user_agent, "safari") != -1 ) # надо полагать, что старые версии Safari называли себя "applewebkit" { ($version) = ($user_agent =~ /\/([\.\d]*)/); $browser = 'Safari'; } # Если браузер не является ни одним из вышеперечисленных, то попробуем определить его имя и версию. # ^(\w*)[\/\s]([\.\d]*) - строка, где имя браузера стоит на первом месте, # например AmigaVoyager/3.4.4 (MorphOS/PPC native) # \s+(\w*)[\/\s]([\.\d]*) - например, Mozilla/4.0 (compatible; MSIE 6.0; WINDOWS; .NET CLR 1.1.4322) unless( $browser ) { ($browser, $version) = ($user_agent =~ /^(\w*)[\/\s]([\.\d]*)|\s+(\w*)[\/\s]([\.\d]*)/); } return( $browser ? ($browser .' '. ( $version ? $version : '?' )) : 'unknown' ); }
|
Это только "флагманские агенты", есть желание добавить еще. Собственно, вопросов особо нет... единственно.. не уверен, какие браузеры следует определять.. т.е. кроме "основных" под Win
|