2009-08-25 20 views

Respuesta

5

El navegador envía esta información en el encabezado HTTP. Consulte el snoop example de Tomcat para obtener algún código (source, online demo).

Tenga en cuenta que esta información no es confiable. El navegador puede mentir sobre quiénes son y sobre qué sistema operativo ejecutan.

+0

Ambos enlaces se ahora muerto. – Stefan

+0

@Stefan: Gracias, corregido. –

45

Su mejor apuesta es el encabezado User-Agent. Se puede conseguir así en JSP o servlet,

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

La cabecera tiene este aspecto,

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 

Proporciona información detallada sobre el navegador. Sin embargo, es un formato bastante libre, por lo que es muy difícil descifrar cada uno. Solo necesita averiguar qué navegadores admitirá y escribir el analizador para cada uno. Cuando intente identificar la versión del navegador, siempre verifique primero la versión más nueva. Por ejemplo, IE6 user-agent puede contener IE5 para compatibilidad con versiones anteriores. Si primero verifica IE5, IE6 también se categorizará como IE5.

se puede obtener una lista completa de todos los valores de agente de usuario de este sitio web,

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

Con User-Agent, puede indicar a la versión exacta del navegador. Puede obtener una muy buena idea sobre el sistema operativo, pero es posible que no pueda distinguir entre las diferentes versiones del mismo sistema operativo, por ejemplo, Windows NT y 2000 pueden usar el mismo agente de usuario.

No hay nada sobre la resolución. Sin embargo, puede obtener esto con Javascript en una llamada AJAX.

+3

También tenga en cuenta que ninguna de esa información puede darse por sentada. Un agente de usuario podría no proporcionar un encabezado de User-Agent o mentir al respecto. Ambos son raros, pero debe tener en cuenta ese hecho si confía en la información. –

+0

@JoachimSauer ¿Puede decirme los casos en que el agente de usuario podría no proporcionar el encabezado de User-Agent o mentir al respecto? – RAS

+1

@RAS: Opera, por ejemplo, le permite al usuario seleccionar el agente de usuario que envía (personificando a Firefox, Chrome o IE, en diferentes sistemas operativos). Y hay una extensión para [Chrome] (https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg), [Firefox] (https://addons.mozilla.org/ de/firefox/addon/user-agent-switcher /) y también sobre cualquier otro navegador. –

34

En Java no existe una forma directa de obtener información relacionada con el navegador y el sistema operativo.

Pero para obtener esto, algunas herramientas de terceros están disponibles.

En lugar de confiar en las herramientas de terceros, lo que sugeriría de análisis el agente de usuario .

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

De esta manera puede separar los detalles del navegador y la información relacionada con el sistema operativo fácilmente según sus necesidades. PFB el fragmento de referencia.

 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); 
+0

para mí funciona en Chrome, pero no en IE11 – oshai

+0

Así es como se ve el agente de usuario como para IE11 >> [Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv: 11.0)]. Por lo tanto, probablemente tenga que agregar una condición if else para manejar "rv", y en base a eso puede determinar si es IE11 o no. FYI MSIE es para la versión anterior, es decir, IE10 y por debajo de – lambodar

+0

se agregó soporte para IE11 – lambodar

10

Puede usar la biblioteca de bittrutler useragentutils: https://github.com/HaraldWalker/user-agent-utils. Le proporcionará información sobre el navegador (nombre, tipo, versión, fabricante, etc.) y sobre el sistema operativo. Una buena cosa es que se mantiene. Acceda al enlace que he proporcionado para ver la dependencia de Maven que necesita agregar a su proyecto para usarlo.

Vea a continuación el código de ejemplo que devuelve el nombre del navegador y la versión del navegador.

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); 
-1
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]; 

      } 
+3

Considere proporcionar una explicación a su respuesta – arghtype

+0

Para obtener información de IE11. pon este código con el ejemplo anterior. –

0

No se puede obtener de forma fiable esta información. La base de varias respuestas proporcionadas aquí es examinar el encabezado User-Agent de la solicitud HTTP. Sin embargo, no hay forma de saber si la información en el encabezado User-Agent es veraz. El cliente que envía la solicitud puede escribir cualquier cosa en ese encabezado. Por lo tanto, su contenido puede ser falsificado o no enviado en absoluto.

2

Hay dos bibliotecas no está mal para procesar las cadenas de agente de usuario:

Cuestiones relacionadas