zoukankan      html  css  js  c++  java
  • 获取用户的操作系统及浏览器信息

    最近在开发中需要从request中获取操作系统,浏览器及浏览器版本信息。我们都知道通过request.getHeader("User-Agent")可以获取到。但是这样获取到的信息是一串内容,里面包含了操作系统和浏览器的信息。

    这是我在我的电脑中用不同浏览访问,得到的信息。

    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 //Chrom

    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0 //FireFox

    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393 //Edge

    Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko //IE11

    我们需要根据自己的需求去写方法获取。

    下面这个方法是我根据StackOverflow上相同问题得到的方法改造后的方法,添加了Edge浏览器。用这个方法就可以得到我们想要的操作系统,浏览器及浏览器版本信息了。

    /**
    * 获取操作系统,浏览器及浏览器版本信息
    * @param request
    * @return
    */
    public static String getOsAndBrowserInfo(HttpServletRequest request){
    String browserDetails = request.getHeader("User-Agent");
    String userAgent = browserDetails;
    String user = userAgent.toLowerCase();

    String os = "";
    String browser = "";

    //=================OS Info=======================
    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("edge"))
    {
    browser=(userAgent.substring(userAgent.indexOf("Edge")).split(" ")[0]).replace("/", "-");
    } else 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 = "Netscape-?";

    } else if (user.contains("firefox"))
    {
    browser=(userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-");
    } else if(user.contains("rv"))
    {
    String IEVersion = (userAgent.substring(userAgent.indexOf("rv")).split(" ")[0]).replace("rv:", "-");
    browser="IE" + IEVersion.substring(0,IEVersion.length() - 1);
    } else
    {
    browser = "UnKnown, More-Info: "+userAgent;
    }

    return os +" --- "+ browser ;
    }

  • 相关阅读:
    VirtualApp
    python安装包遇到问题解决
    NMS_非极大值抑制的作用
    解释残差结构的有效性
    使用tcpdump命令抓取sql
    linux进程绑定cpu内核
    查询表空间占用情况
    数据库表分区
    Windows下如何使用ab命令做并发测试
    TCP协议
  • 原文地址:https://www.cnblogs.com/lovelyp/p/10250776.html
Copyright © 2011-2022 走看看