如何获得客户端信息,如操作系统和浏览器

我正在使用JSP,Servlet来开发我的Web应用程序。

我想获得客户端的信息,如:操作系统,浏览器,parsing度…每当一个客户端正在使用我的网站。

你最好的select是User-Agent头。 你可以在JSP或Servlet中像这样得到它,

String userAgent = request.getHeader("User-Agent"); 

标题看起来像这样,

 User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.13) Gecko/2009073021 Firefox/3.0.13 

它提供了浏览器的详细信息。 然而,这是非常自由的格式,所以很难破译每一个。 你只需要找出你将支持哪些浏览器,并为每个浏览器编写parsing器。 当您尝试识别浏览器的版本时,请务必首先检查较新的版本。 例如,IE6用户代理可能包含IE5以实现向后兼容。 如果您先检查IE5,则IE6也将被归类为IE5。

您可以从该网站获得所有用户代理值的完整列表,

http://www.user-agents.org/

使用User-Agent,您可以知道浏览器的确切版本。 你可以在操作系统上得到一个很好的主意,但你可能无法区分同一个操作系统的不同版本,例如,Windows NT和2000可能使用相同的用户代理。

没有解决办法。 不过,你可以通过AJAX调用Javascript来获得这个。

在Java中,没有直接的方式来获得浏览器和操作系统相关的信息。

但是为了得到这个第三方工具是可用的。

我build议你不要信任第三方工具,而是要parsing 用户代理

 String browserDetails = request.getHeader("User-Agent"); 

通过这样做,您可以根据您的要求轻松分离浏览器详细信息和操作系统相关信息。 PFB的片段供参考。

  String browserDetails = request.getHeader("User-Agent"); String userAgent = browserDetails; String user = userAgent.toLowerCase(); String os = ""; String browser = ""; log.info("User Agent for the request is===>"+browserDetails); //=================OS======================= if (userAgent.toLowerCase().indexOf("windows") >= 0 ) { os = "Windows"; } else if(userAgent.toLowerCase().indexOf("mac") >= 0) { os = "Mac"; } else if(userAgent.toLowerCase().indexOf("x11") >= 0) { os = "Unix"; } else if(userAgent.toLowerCase().indexOf("android") >= 0) { os = "Android"; } else if(userAgent.toLowerCase().indexOf("iphone") >= 0) { os = "IPhone"; }else{ os = "UnKnown, More-Info: "+userAgent; } //===============Browser=========================== if (user.contains("msie")) { String substring=userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0]; browser=substring.split(" ")[0].replace("MSIE", "IE")+"-"+substring.split(" ")[1]; } else if (user.contains("safari") && user.contains("version")) { browser=(userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0]+"-"+(userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1]; } else if ( user.contains("opr") || user.contains("opera")) { if(user.contains("opera")) browser=(userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0]+"-"+(userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1]; else if(user.contains("opr")) browser=((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-")).replace("OPR", "Opera"); } else if (user.contains("chrome")) { browser=(userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-"); } else if ((user.indexOf("mozilla/7.0") > -1) || (user.indexOf("netscape6") != -1) || (user.indexOf("mozilla/4.7") != -1) || (user.indexOf("mozilla/4.78") != -1) || (user.indexOf("mozilla/4.08") != -1) || (user.indexOf("mozilla/3") != -1) ) { //browser=(userAgent.substring(userAgent.indexOf("MSIE")).split(" ")[0]).replace("/", "-"); browser = "Netscape-?"; } else if (user.contains("firefox")) { browser=(userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-"); } else if(user.contains("rv")) { browser="IE-" + user.substring(user.indexOf("rv") + 3, user.indexOf(")")); } else { browser = "UnKnown, More-Info: "+userAgent; } log.info("Operating System======>"+os); log.info("Browser Name==========>"+browser); 

您可以使用bitwalker useragentutils库: https : //github.com/HaraldWalker/user-agent-utils 。 它会为您提供有关浏览器(名称,types,版本,制造商等)和操作系统的信息。 关于它的一件好事是它被维护。 访问我提供的链接来查看需要添加到项目中的Maven依赖项以使用它。

请参阅下面的示例代码,返回浏览器名称和浏览器版本。

  UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent")); Browser browser = userAgent.getBrowser(); String browserName = browser.getName(); //or // String browserName = browser.getGroup().getName(); Version browserVersion = userAgent.getBrowserVersion(); System.out.println("The user is using browser " + browserName + " - version " + browserVersion); 

浏览器在HTTP标题中发送这个信息。 有关代码,请参阅Tomcat的snoop示例 ( 源代码 , 在线演示 )。

请注意,这些信息是不可靠的。 浏览器可以做谎言,他们是谁,他们运行什么操作系统。

有两个parsing用户代理string的不好的库:

  • user-agent-utils – 仅限于java,达到了生命周期结束
  • ua分析器 – 多语言,积极维护

你无法可靠地获得这些信息。 这里提供的几个答案的基础是检查HTTP请求的User-Agent头。 但是,没有办法知道User-Agent头部中的信息是否真实。 发送请求的客户端可以在该头中写入任何内容。 所以它的内容可以被欺骗,或者根本不被发送。

 else if(user.contains("rv:11.0")) { String substring=userAgent.substring(userAgent.indexOf("rv")).split("\\)")[0]; browser=substring.split(":")[0].replace("rv", "IE")+"-"+substring.split(":")[1]; }