Определить, является ли посетитель браузером, а не сканером

2

Как я обнаружил бы серверную страницу, если пользователь веб-страницы является браузером?

Причиной обнаружения этого является то, что я храню статистику посещаемых страниц, и я не хочу сохранять статистику, когда пользователь является искателем. Поэтому я не пытаюсь определить, какого поставщика браузера. Мне нужен только логический ответ, пользовательский браузер.

Я предполагаю, что ответ связан с заголовком user-agent, но многочисленные возможные значения слишком велики для меня, чтобы понять. Как я могу его обнаружить? 90% -ное решение, в котором я обнаружил только самый популярный браузер Top5, будет достаточно хорошим.

Я использую С# ASP.Net, но я предполагаю, что большинство решений на других языках и фреймворках могут быть переведены.

  • 4
    Насколько я понимаю, пользователь - это человек, который использует браузер. Таким образом, пользователь никогда не является браузером. Вы имеете в виду, как вы можете определить, какие пользователи браузера используют?
  • 3
    «Я не браузер, я свободный человек!» пользователь-> получить (пальто); пользователь-> одежда (пальто); пользователь-> выход (комната);
Показать ещё 1 комментарий
Теги:
browser
http

6 ответов

5
Лучший ответ

Этот код ни в коем случае не является исчерпывающим, но дает вам базовое основание в PHP. Я не могу гарантировать, что некоторые из них не проскользнут через сеть, но это должно уловить большинство браузеров и игнорировать большинство ботов.

<?php
// Regular expression to match common browsers
$browserlist = '/(opera|aol|msie|firefox|chrome|konqueror|safari|netscape|navigator|mosaic|lynx|amaya|omniweb|avant|camino|flock|seamonkey|mozilla|gecko)+/i';

// Test for browsers
if (preg_match($browserlist, $_SERVER['HTTP_USER_AGENT'])) {
    // ...is a browser
} else {
    // ...is not a browser
}
?>
  • 0
    не должно ли быть 'i' в конце совпадения preg, чтобы сделать его нечувствительным к регистру?
  • 0
    Очень хороший момент! Я пропустил это, поскольку я обычно strtolower пользовательский агент сначала .. просто исправить
Показать ещё 4 комментария
1

это даст вам 99% -ную точность.

Regex.IsMatch(Request.UserAgent, @"bot|crawler|baiduspider|80legs|ia_archiver|voyager|curl|wget|yahoo! slurp|mediapartners-google", RegexOptions.IgnoreCase);

В моем ответе я привел больше решений:

Обнаружение честных веб-сканеров

1

Если вы используете PHP, попробуйте $_SERVER['HTTP_USER_AGENT'] или get_browser().

Здесь класс, доступный для загрузки, который делает этот процесс невероятно легким. Пример использования:

$browser = new Browser();
if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
 echo 'You have FireFox version 2 or greater';
}
  • 0
    Это действительно хороший класс. Простота интеграции и использования, а также хорошие функции. Действительно полезный, я использую его для обнаружения входящих роботов Crawlers и довольно легко справляется с работой.
1

Я не уверен, почему вы это делаете.

Однако вы не хотите даже притворяться, что можете говорить между человеком и роботом, основанным на заголовке User-agent. Возможно, вам удастся добиться успеха в анализе шаблона и времени запросов.

0

Perl имеет модуль HTTP:: BrowserDetect. Согласно документам, у этого есть метод, который проверяет, является ли пользовательский агент роботом. Я думаю, что все, что не является роботом, вероятно, является браузером.

  • 0
    Я думаю, что они оба браузеры, либо браузеры, такие как Firefox, IE и т. Д. И роботы, потому что они оба браузер страницы. Просто мое мнение.
0

Если вам нужно решить, следует ли возвращать (скажем) исходный текст для script по сравнению с HTML для браузера, возможно, вам следует проверить Accept- Кодирование заголовка запроса?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню