Как я могу получить информацию о клиенте, такую ​​как ОС и браузер - PullRequest
51 голосов
/ 25 августа 2009

Я использую JSP, Servlet для разработки своего веб-приложения.

Я хочу получать информацию о клиенте, такую ​​как: операционная система, браузер, разрешение, ... всякий раз, когда клиент использует мой сайт.

Ответы [ 8 ]

55 голосов
/ 25 августа 2009

Ваша лучшая ставка - заголовок 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

Предоставляет подробную информацию о браузере. Тем не менее, это в значительной степени бесплатный формат, поэтому очень сложно расшифровать каждый из них. Вам просто нужно выяснить, какие браузеры вы будете поддерживать, и написать парсер для каждого. Когда вы пытаетесь определить версию браузера, всегда сначала проверяйте более новую версию. Например, пользовательский агент IE6 может содержать IE5 для обратной совместимости. Если вы сначала проверите IE5, IE6 также будет классифицирован как IE5.

Вы можете получить полный список всех значений user-agent с этого веб-сайта,

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

С помощью User-Agent вы можете узнать точную версию браузера. Вы можете получить довольно хорошее представление об ОС, но не сможете различить разные версии одной и той же ОС, например, Windows NT и 2000 могут использовать один и тот же User-Agent.

Нет ничего о разрешении. Однако вы можете получить это с помощью Javascript при вызове AJAX.

51 голосов
/ 03 августа 2013

В Java нет прямого способа получить информацию, связанную с браузером и ОС.

Но для этого есть несколько сторонних инструментов.

Вместо того, чтобы доверять сторонним инструментам, я предлагаю вам разобрать пользовательский агент .

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);
13 голосов
/ 11 ноября 2014

Вы можете использовать библиотеку 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);
6 голосов
/ 25 августа 2009

Браузер отправляет эту информацию в заголовок HTTP. См. Пример snoop Tomcat для некоторого кода ( source , online demo ).

Обратите внимание, что эта информация не является надежной. Браузер может и лжет о том, кто он и в какой ОС он работает.

5 голосов
/ 12 января 2017

Есть две неплохие библиотеки для разбора строк пользовательского агента:

  • user-agent-utils - только java, достигнут конец срока службы
  • ua-parser - мультиязычный, активно поддерживается
0 голосов
/ 07 июня 2019

Этот код основан на вопросе с наибольшим количеством голосов, но мне может быть проще использовать

public enum OS {

    WINDOWS,
    MAC,
    LINUX,
    ANDROID,
    IPHONE,
    UNKNOWN;

    public static OS valueOf(HttpServletRequest request) {

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

        if (userAgent == null || userAgent.isEmpty()) {
            toReturn = UNKNOWN;
        } else if (userAgent.toLowerCase().contains("windows")) {
            toReturn = WINDOWS;
        } else if (userAgent.toLowerCase().contains("mac")) {
            toReturn = MAC;
        } else if (userAgent.toLowerCase().contains("x11")) {
            toReturn = LINUX;
        } else if (userAgent.toLowerCase().contains("android")) {
            toReturn = ANDROID;
        } else if (userAgent.toLowerCase().contains("iphone")) {
            toReturn = IPHONE;
        } else {
            toReturn = UNKNOWN;
        }

        return toReturn;
    }

}
0 голосов
/ 03 августа 2016

Вы не можете достоверно получить эту информацию. Основой нескольких ответов, представленных здесь, является проверка заголовка User-Agent HTTP-запроса. Однако нет способа узнать, является ли информация в заголовке User-Agent достоверной. Клиент, отправляющий запрос, может написать что угодно в этом заголовке. Таким образом, его содержимое может быть подделано или не отправлено вообще.

0 голосов
/ 13 января 2015
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];

            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...