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

53 java servlets

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

我希望获得客户信息,例如:操作系统,浏览器,分辨率......每当客户使用我的网站时.

ZZ *_*der 58

您最好的选择是User-Agent标头.你可以在JSP或Servlet中得到它,

String userAgent = request.getHeader("User-Agent");
Run Code Online (Sandbox Code Playgroud)

标题看起来像这样,

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
Run Code Online (Sandbox Code Playgroud)

它提供有关浏览器的详细信息.然而,它几乎是免费的格式,因此很难解读每一个.您只需要弄清楚您将支持哪些浏览器并为每个浏览器编写解析器.当您尝试识别浏览器的版本时,请始终先检查更新的版本.例如,IE6用户代理可能包含IE5以实现向后兼容.如果先检查IE5,IE6也会被归类为IE5.

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

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

使用User-Agent,您可以告诉浏览器的确切版本.您可以在操作系统上获得一个非常好的想法,但您可能无法区分同一操作系统的不同版本,例如,Windows NT和2000可能使用相同的用户代理.

决议没有任何意义.但是,您可以在AJAX调用上使用Javascript获取此信息.

  • 另请注意,这些信息都不能被视为理所当然.用户代理可能根本不提供User-Agent标头或谎言.这两种情况都很少见,但如果您依赖这些信息,就应该牢记这一点. (3认同)

lam*_*dar 54

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

但要获得这些少数第三方工具.

相反,信任的第三方工具,我建议你分析用户代理.

String  browserDetails  =   request.getHeader("User-Agent");
Run Code Online (Sandbox Code Playgroud)

通过这样做,您可以根据您的要求轻松分离浏览器详细信息和操作系统相关信息.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);
Run Code Online (Sandbox Code Playgroud)


小智 13

您可以使用bitwalker useragentutils库:https://github.com/HaraldWalker/user-agent-utils.它将为您提供有关浏览器(名称,类型,版本,制造商等)和操作系统的信息.它的一个好处是它得到维护.访问我提供的链接,以查看您需要添加到项目中的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);
Run Code Online (Sandbox Code Playgroud)

  • 小心。该库不再维护,并且在链接的 github 页面上有“生命结束”通知。 (2认同)

Aar*_*lla 6

浏览器在HTTP标头中发送此信息.有关一些代码(源代码,在线演示),请参阅Tomcat 的snoop示例.

请注意,此信息不可靠.浏览器可以而且可以确定他们是谁以及他们运行的操作系统.


two*_*rec 5

有两个不错的库来解析用户代理字符串: