有没有一种很好的方法来解析用户代理字符串?

问题描述 投票:26回答:4

我有一个Java模块,从最终用户的浏览器接收User-Agent字符串需要根据浏览器的类型,浏览器的版本甚至操作系统略有不同。例如:{"FireFox", "7.0", "Win7"}{"Safari", "3.2", "iOS9"}

据我所知,由于插件安装不同等原因,User-Agent字符串的格式可能因完全相同的配置而异。

我的问题:

  1. User-Agent的结构是否定义明确?如果是的话 - 我在哪里可以找到它? (根据我对RFC的理解,这里没有太多的标准化)。
  2. 假设#1的问题是No - 是否有正确的方法来解析它以获取我需要的信息?
  3. 除了User-Agent字符串之外,还有更好的方法来获取我需要的信息吗?

重要提示 - 我说的是一个网络应用程序,所以我的数据收集能力仅限于javascript

java parsing user-agent
4个回答
16
投票

对于Java,请看一下User-Agent-Utils。它相当紧凑(<50kB)并且没有依赖性。

请注意,虽然最新版本是最新版本(1.21,发布时间为2018-01-24),但该库的页面指出:

警告:此项目已停止使用,不再定期更新

github page上它说:

EOL警告

该库已达到使用寿命,不再定期更新。

版本1.21是2018年的最后一次正式版本。


16
投票

看看我为此目的编写的Java库:Yauaa

我做了一个非常简单的servlet,你可以尝试一下,看看它是否能给出你想要的答案:https://try.yauaa.basjes.nl/

它是Apache 2许可并发布到Maven中,因此在Java应用程序中使用它非常简单。它目前用于荷兰最繁忙的网站之一(我工作的地方)。

有关此https://techlab.bol.com/making-sense-user-agent-string/的信息,请参阅此博客


12
投票
  1. 用户代理的结构是否定义良好?如果是的话 - 我在哪里可以找到它? (根据我对RFC的理解,这里没有太多的标准化)。

不,用户代理字符串的结构不是标准化的,但在不同代理之间非常相似。虽然它们非常相似,但仍然需要使用多种模式进行检测。

  1. 假设#1的问题是否 - 是否有正确的方法来解析它以获取我需要的信息?

你可以试试库UADetector。它是user-agent-string.info的User-Agent-Database的包装器。

  1. 除了User-Agent字符串之外,还有更好的方法来获取我需要的信息吗?

我不会说它是更好或更坏的方式,但另一种检测用户代理的方法是客户端使用JavaScript来收集有关User-Agent的信息,并通过隐藏的HTML输入或XmlHttpRequest将其提交给您的后端。这一切都取决于你想要识别的内容。为了准确检测webcrawler,JavaScript将无法提供帮助。


3
投票

user-agent-utils图书馆已经达到临终状态。

有一种很有前途的多语言库,叫做ua-parser,它被积极维护。

© www.soinside.com 2019 - 2024. All rights reserved.