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

时间:2011-10-17 16:03:12

标签: 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字符串之外,还有更好的方法来获取我需要的信息吗?
  4. 重要提示 - 我在谈论网络应用,因此我的数据收集功能仅限于javascript

5 个答案:

答案 0 :(得分:16)

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

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

  

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

github page上说:

  

EOL警告

     

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

     

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

答案 1 :(得分:15)

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

我制作了一个非常简单的servlet,你可以试试看它是否能提供你想要的答案:https://try.yauaa.basjes.nl/

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

有关此https://techlab.bol.com/making-sense-user-agent-string/

的信息,请参阅此博客

答案 2 :(得分:12)

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

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

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

您可以尝试使用库UADetector。它是user-agent-string.info的用户代理数据库的包装器。

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

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

答案 3 :(得分:3)

user-agent-utils库已达到使用寿命。

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

答案 4 :(得分:0)

对于在Github上享有良好声誉的最新图书馆,可以使用:

https://github.com/blueconic/browscap-java

由于它基于Browscap,因此将来可以轻松升级到新的浏览器。