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

Ron*_*onK 28 java parsing user-agent

我有一个Java模块,User-Agent从最终用户的浏览器接收字符串需要稍微不同的行为取决于浏览器的类型,浏览器的版本,甚至可能是操作系统.如:{"FireFox", "7.0", "Win7"},{"Safari", "3.2", "iOS9"}

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

我的问题:

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

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

Nie*_*jes 19

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

我做了一个非常简单的servlet,你可以尝试一下,看看它是否能提供你想要的答案:http://analyze-useragent.appspot.com/

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

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


Ted*_*opp 17

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

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

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

github页面上它说:

EOL警告

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

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

  • @TedHopp:是的,使用者的谎言是一个主要问题.另请参阅我的博客主题https://techlab.bol.com/making-sense-user-agent-string/,这是关于https://github.com/nielsbasjes/yauaa和该分析器的架构. (2认同)

bef*_*ore 12

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

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

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

您可以尝试使用库UADetector.它是user-agent-string.info的User-Agent-Database的包装器.

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

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