Есть ли хороший метод для анализа строки агента пользователя? - PullRequest
27 голосов
/ 17 октября 2011

У меня есть модуль Java, который получает строку User-Agent от браузера конечного пользователя и должен вести себя немного по-разному в зависимости от типа браузера, версии браузера и, возможно, даже операционной системы. Например: {"FireFox", "7.0", "Win7"}, {"Safari", "3.2", "iOS9"}

Я понял, что строка User-Agent может отличаться по формату для одной и той же конфигурации из-за разных установок плагинов и т. Д.

Мои вопросы:

  1. Хорошо ли определена структура User-Agent? Если да - где я могу найти это точно? (Из моего понимания RFC здесь не так много стандартизации).
  2. Предполагая, что вопрос для № 1 - No - есть ли правильный способ разобрать его, чтобы получить информацию, которая мне нужна?
  3. Есть ли лучший способ получить нужную мне информацию, кроме строки User-Agent?

Важное замечание - я говорю о веб-приложении, поэтому мои возможности по сбору данных ограничены javascript.

Ответы [ 4 ]

16 голосов
/ 21 февраля 2017

Посмотрите библиотеку Java, которую я написал для этой цели: Yauaa

Я сделал очень простой сервлет, в котором вы можете попробовать его, чтобы увидеть, дает ли он ответы, которые вы ищете: https://try.yauaa.basjes.nl/

Это Apache 2, лицензированный и опубликованный в Maven, поэтому использовать его в приложении Java очень просто. В настоящее время он используется в производстве на одном из самых загруженных веб-сайтов Нидерландов (где я работаю).

Смотрите этот блог об этом https://techlab.bol.com/making-sense-user-agent-string/

16 голосов
/ 17 октября 2011

Для Java взгляните на User-Agent-Utils .Он довольно компактен (<50 КБ) и не имеет зависимостей. </p>

Обратите внимание, что, хотя последний выпуск является довольно недавним (1.21, выпущен 2018-01-24), на странице библиотеки указано:

Предупреждение: срок действия этого проекта истек, и он больше не будет регулярно обновляться

А на странице github написано:

EOL WARNING

Эта библиотека устарела и больше не будет видеть регулярные обновления.

Версия 1.21 была последним официальным выпуском в 2018 году.

12 голосов
/ 18 мая 2012
  1. Хорошо ли определена структура User-Agent? Если да - где я могу найти это точно? (Из моего понимания RFC не так много стандартизация здесь).

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

  1. Предполагая, что вопрос № 1 - Нет - есть ли правильный способ разобрать, чтобы получить информацию, которая мне нужна?

Вы можете попробовать библиотеку UADetector . Это оболочка для базы данных User-Agent-Database user-agent-string.info .

  1. Есть ли лучший способ получить нужную мне информацию, кроме строки User-Agent?

Я бы не сказал, что это лучший или худший способ, но другим способом обнаружения пользовательских агентов является использование JavaScript на стороне клиента для сбора информации о User-Agent и отправки ее через скрытые вводы HTML или XmlHttpRequest в ваш бэкэнд , Все зависит от того, что вы хотите идентифицировать. Для точного обнаружения веб-сканеров JavaScript не сможет помочь.

3 голосов
/ 12 января 2017

Срок действия библиотеки user-agent-utils истек.

Существует многоязычная библиотека под названием ua-parser , которая активно поддерживается.

...