2009-08-25 12 views

Antwort

5

Der Browser sendet diese Informationen im HTTP-Header. Einen Code finden Sie unter snoop example von Tomcat (source, online demo).

Beachten Sie, dass diese Information nicht zuverlässig ist. Browser können und lügen darüber, wer sie sind und auf welchem ​​Betriebssystem sie laufen.

+0

Beiden Verbindungen sind jetzt tot. – Stefan

+0

@Stefan: Danke, behoben. –

45

Ihre beste Wette ist User-Agent-Header. Sie können es dies in JSP oder Servlets bekommen,

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

Der Header wie folgt aussieht,

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 

Es liefert detaillierte Informationen über Browser. Es ist jedoch ziemlich frei Format, so dass es sehr schwer ist, jeden einzelnen zu entziffern. Sie müssen nur herausfinden, welche Browser Sie unterstützen und Parser für jeden schreiben. Wenn Sie versuchen, die Version des Browsers zu identifizieren, überprüfen Sie immer zuerst die neuere Version. Zum Beispiel kann IE6 User-Agent IE5 aus Gründen der Abwärtskompatibilität enthalten. Wenn Sie IE5 zuerst überprüfen, wird IE6 auch als IE5 kategorisiert.

Sie können eine vollständige Liste aller User-Agent-Werte von dieser Website erhalten,

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

Mit User-Agent, können Sie die genaue Version des Browsers berichten. Sie können eine ziemlich gute Idee über OS bekommen, aber Sie können möglicherweise nicht zwischen verschiedenen Versionen desselben Betriebssystems unterscheiden, zum Beispiel können Windows NT und 2000 denselben User-Agent verwenden.

Es gibt nichts über die Auflösung. Sie können dies jedoch mit Javascript bei einem AJAX-Aufruf erhalten.

+3

Beachten Sie auch, dass keine dieser Informationen als selbstverständlich angesehen werden kann. Ein Benutzeragent bietet möglicherweise keinen User-Agent-Header oder lügt darüber. Beides ist selten, aber Sie sollten diese Tatsache berücksichtigen, wenn Sie sich auf die Informationen verlassen. –

+0

@JoachimSauer Können Sie mir die Fälle nennen, in denen User Agent den User-Agent-Header nicht anbietet oder darüber lügt? – RAS

+1

@RAS: Opera ermöglicht es dem Benutzer beispielsweise, den Benutzer-Agent auszuwählen, den er sendet (als Identität von Firefox, Chrome oder IE auf verschiedenen Betriebssystemen). Und es gibt eine Erweiterung für [Chrome] (https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg), [Firefox] (https://addons.mozilla.org/ de/firefox/addon/user-agent-switcher /) und auch über jeden anderen Browser. –

34

In Java gibt es keine direkte Möglichkeit, browser- und betriebssystembezogene Informationen zu erhalten.

Aber um dies zu bekommen, sind einige Tools von Drittanbietern verfügbar.

Statt Tools von Drittanbietern zu vertrauen, ich schlage vor, Sie zu Parse der User-Agent.

Dadurch können Sie die Browser-Details und Betriebssystem verwandte Informationen leicht nach Ihren Anforderungen zu trennen. PFB das Snippet als Referenz.

 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

für mich funktioniert es auf Chrom, aber nicht auf IE11 – oshai

+0

Dies ist, wie der Benutzer-Agent aussieht wie für IE11 >> [Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv: 11.0)]. Sie müssen also wahrscheinlich noch eine weitere Bedingung hinzufügen, um "rv" zu behandeln, und basierend darauf können Sie bestimmen, ob es IE11 ist oder nicht. FYI MSIE ist für die alte Version, d. H. IE10 und unter – lambodar

+0

hinzugefügt Unterstützung für IE11 – lambodar

10

Sie können die bitwalker useragentutils-Bibliothek verwenden: https://github.com/HaraldWalker/user-agent-utils. Es liefert Ihnen Informationen über den Browser (Name, Typ, Version, Hersteller, etc.) und über das Betriebssystem. Eine gute Sache ist, dass es beibehalten wird. Greifen Sie auf den von mir bereitgestellten Link zu, um die Maven-Abhängigkeit anzuzeigen, die Sie Ihrem Projekt hinzufügen müssen, um sie verwenden zu können.

Siehe Beispielcode, der den Browsernamen und die Browserversion zurückgibt.

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

Erwägen Sie eine Erklärung zu Ihrer Antwort – arghtype

+0

Um IE11 Informationen zu erhalten. setze diesen Code mit dem obigen Beispiel. –

0

Sie können diese Informationen nicht zuverlässig erhalten. Die Grundlage mehrerer Antworten, die hier bereitgestellt werden, besteht darin, den User-Agent-Header der HTTP-Anforderung zu untersuchen. Es gibt jedoch keine Möglichkeit zu wissen, ob die Informationen in der User-Agent-Kopfzeile wahrheitsgemäß sind. Der Client, der die Anfrage sendet, kann irgendetwas in diesen Header schreiben. Daher kann der Inhalt gefälscht oder überhaupt nicht gesendet werden.

2

Es gibt zwei nicht schlecht Libs für das Parsen von Strings User-Agenten:

Verwandte Themen