我有一个Java
模块,从最终用户的浏览器接收User-Agent
字符串需要根据浏览器的类型,浏览器的版本甚至操作系统的不同而略有不同。
例如:{"FireFox", "7.0", "Win7"}
,{"Safari", "3.2", "iOS9"}
据我所知,由于插件安装不同等原因,User-Agent
字符串的格式可能因完全相同的配置而异。
我的问题:
User-Agent
的结构是否定义明确?如果是的话 - 我在哪里可以找到它? (根据我对RFC的理解,这里标准化程度不高。)No
- 是否有正确的方法来解析它以获取我需要的信息? User-Agent
字符串之外,还有更好的方法来获取我需要的信息吗?重要提示 - 我在谈论网络应用,因此我的数据收集功能仅限于javascript
。
答案 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应用程序中使用它非常简单。它目前在荷兰最繁忙的网站之一(我工作的地方)上使用。
的信息,请参阅此博客答案 2 :(得分:12)
- 用户代理的结构是否定义良好?如果是的话 - 我在哪里可以找到它? (根据我对RFC的理解,并没有太多 标准化在这里)。
醇>
不,用户代理字符串的结构未标准化,但在不同代理之间非常相似。尽管它们非常相似,但仍然需要使用多种模式进行检测。
- 假设#1的问题是否 - 是否有正确的方法 解析它以获得我需要的信息?
醇>
您可以尝试使用库UADetector。它是user-agent-string.info的用户代理数据库的包装器。
- 除了User-Agent字符串之外,还有更好的方法来获取我需要的信息吗?
醇>
我不会说它是更好或更坏的方式,但检测用户代理的另一种方法是客户端使用JavaScript来收集有关User-Agent的信息,并通过隐藏的HTML输入或XmlHttpRequest将其提交给后端。这一切都取决于你想要识别的内容。为了准确检测webcrawler,JavaScript将无法提供帮助。
答案 3 :(得分:3)
user-agent-utils库已达到使用寿命。
有一种很有前途的多语言库,名为ua-parser,它被积极维护。
答案 4 :(得分:0)
对于在Github上享有良好声誉的最新图书馆,可以使用:
https://github.com/blueconic/browscap-java
由于它基于Browscap,因此将来可以轻松升级到新的浏览器。