2011-10-17 55 views
21

我有一个Java模块,从最终用户的浏览器接收User-Agent字符串需要略有不同的行为取决于浏览器的类型,浏览器的版本,甚至可能是操作系统。 例如:{"FireFox", "7.0", "Win7"}{"Safari", "3.2", "iOS9"}是否有解析用户代理字符串的好方法?

我了解,User-Agent字符串可以在其完全相同的配置格式由于不同安装插件等

我的问题有所不同:

  1. 是的定义良好的User-Agent的结构?如果是 - 我在哪里可以找到它? (从我对RFC的理解来看,这里没有太多的标准化)。
  2. 假设#1的问题是No - 是否有适当的方法来解析它以获取我需要的信息?
  3. 有没有更好的方式来获得我需要的信息,而不是User-Agent字符串?

重要说明 - 我正在谈论一个网络应用程序,因此我的数据收集功能仅限于javascript

+0

*“需要表现略有不同” *以不同的方式如何,**专?**有供应的内容的权利的内容/形式向最终用户基于多种技术需要。他们中很少有人依靠解析固有的不可信的UA字符串。 –

+0

_“我的数据收集能力仅限于JavaScript”_ Java或Javascript? –

+0

@安德鲁汤普森 - 你能详细说说你所指的是哪种形式的信息收集技术?我仅限于非交互式方法。 – RonK

回答

16

对于Java,请看User-Agent-Utils。它非常紧凑(< 50kB)并且没有依赖关系。

注意虽然最新的版本是相当最近(1.21,发布2018年1月24日),图书馆的页面状态:

警告:该项目是报废的,并不会定期更新不再

而且在github page它说:

EOL警告

此库已达到使用期限,并且不会再定期更新 。

1.21版本是是用户代理的结构明确的2018年

+1

这些页面现在说“EOL WARNING 此库已达到报废结果! 版本1.20是最新的官方版本。 ” –

+0

@NielsBasjes - 这很有趣。这里的其他一些答案有指向其他库的指针。 Harald Walker的[博客文章](http://www.bitwalker.eu/blog/user-agent-utils-1-20-final-release)介绍了为什么他停止User Agent Util的进一步开发,绝对值得一读。 –

+2

@TedHopp:是的,在使用者的谎言是一个主要问题。另见我的博客https://techlab.bol.com/making-sense-user-agent-string/这是关于https://github.com/nielsbasjes/yauaa和该分析器的体系结构。 –

11
  1. 最后的正式发布?如果是 - 我在哪里可以找到它? (根据我对RFC的理解,这里没有太多的标准化)。

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

  • 假设为#1的问题是,否 - 是那里 解析它一个适当的方式来获得我需要的信息?
  • 您可以尝试图书馆UADetector。它是user-agent-string.info的用户代理数据库的包装。

    1. 有没有更好的方法来获取除User-Agent字符串以外的其他信息?

    我不会说这是好还是坏的方式,但另一种方式来检测用户代理是客户端使用JavaScript来收集有关用户代理的信息,并通过隐藏的HTML的输入在提交或XmlHttpRequest到您的后端。这一切都取决于你想要识别什么。为了准确检测网络爬虫,JavaScript将无法提供帮助。

    3

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

    有前途的多语言库称为ua-parser这是积极维护。

    +0

    看起来不像ua解析器被主动维护:https:// github。com/ua-parser/uap-java/issues/1 – elhefe

    7

    看一看Java库我写了这个目的:Yauaa

    我做了一个非常简单的servlet,你可以尝试一下,看看它给你正在寻找的答案:http://analyze-useragent.appspot.com/

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

    看到这个博客这个https://techlab.bol.com/making-sense-user-agent-string/

    +0

    谢谢,虽然这是一个相当古老的问题(从2011年起) - 我可能还需要它 - 内置的LRU对我当前的需求是一个很好的补充,它有一个可配置的大小? – RonK

    +0

    是的,你可以设置大小,甚至禁用它。 –

    相关问题