2009-08-25 6 views

Odpowiedz

5

Przeglądarka wysyła tę informację w nagłówku HTTP. Zobacz kod snoop example Tomcat pod kątem kodu (source, online demo).

Należy pamiętać, że ta informacja nie jest wiarygodna. Przeglądarka może i kłamie na temat tego, kim są i na jakim systemie operacyjnym działają.

+0

Oba linki teraz martwy. – Stefan

+0

@Stefan: Dzięki, naprawione. –

45

Twój najlepszy zakład to nagłówek User-Agent. Możesz dostać to tak w JSP lub serwletu,

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

nagłówek wygląda tak,

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 

Dostarcza szczegółowych informacji na temat przeglądarki. Jest to jednak dość wolny format, więc bardzo trudno jest rozszyfrować każdy z nich. Musisz tylko dowiedzieć się, które przeglądarki będziesz obsługiwać i pisać dla każdego z nich. Podczas próby zidentyfikowania wersji przeglądarki zawsze sprawdź najpierw nowszą wersję. Na przykład agent użytkownika IE6 może zawierać IE5 dla zgodności wstecznej. Jeśli najpierw sprawdzisz IE5, IE6 będzie również sklasyfikowany jako IE5.

można uzyskać pełną listę wszystkich wartości User-Agent z tej strony internetowej,

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

Z User-Agent, można powiedzieć dokładnie wersję przeglądarki. Możesz mieć całkiem niezły pomysł na system operacyjny, ale możesz nie być w stanie odróżnić różnych wersji tego samego systemu operacyjnego, na przykład system Windows NT i 2000 może używać tego samego klienta użytkownika.

Nie ma nic w kwestii rozdzielczości. Jednak można to uzyskać za pomocą JavaScript w wywołaniu AJAX.

+3

Należy również pamiętać, że żadna z tych informacji nie może być brana za pewnik. Agent użytkownika może nie dostarczać w ogóle nagłówka User-Agent lub kłamać na jego temat. Oba są rzadkie, ale powinieneś o tym pamiętać, jeśli polegasz na tych informacjach. –

+0

@JoachimSauer Czy możesz mi powiedzieć przypadki, w których agent użytkownika może nie podawać nagłówka User-Agent lub kłamać na jego temat? – RAS

+1

@RAS: Opera, na przykład, pozwala użytkownikowi wybrać agenta użytkownika, który wysyła (podszywając się pod Firefox, Chrome lub IE, w różnych systemach operacyjnych). Jest też rozszerzenie dla [Chrome] (https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg), [Firefox] (https://addons.mozilla.org/ de/firefox/addon/user-agent-switcher /) oraz o każdej innej przeglądarce. –

34

W Javie nie ma bezpośredniego sposobu na uzyskanie informacji związanych z przeglądarką i systemem operacyjnym.

Jednak w tym celu dostępne są narzędzia innych firm.

Zamiast ufać narzędzi innych firm, proponuję Ci parse Agenta użytkownik.

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

W ten sposób można łatwo oddzielić dane przeglądarki i systemu operacyjnego informacji związanych w zależności od zapotrzebowania. PFB fragment kodu referencyjnego.

 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

dla mnie działa na chrome, ale nie na IE11 – oshai

+0

Tak wygląda program użytkownika jak dla IE11 >> [Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv: 11.0)]. Więc prawdopodobnie musisz dodać jeszcze jeden warunek if else, aby obsłużyć "rv", i na podstawie tego możesz określić, czy to IE11, czy nie. FYI MSIE jest dla starej wersji, tj. IE10 i poniżej – lambodar

+0

dodano obsługę IE11 – lambodar

10

Możesz użyć biblioteki Bitdach użytkownika useragentutils: https://github.com/HaraldWalker/user-agent-utils. Dostarczy ci informacji o przeglądarce (nazwa, typ, wersja, producent itp.) Oraz o systemie operacyjnym. Dobrą rzeczą jest to, że jest on utrzymywany. Uzyskaj dostęp do podanego linku, aby zobaczyć zależność Maven, którą musisz dodać do projektu, aby z niej skorzystać.

Zobacz poniżej przykładowy kod, który zwraca nazwę przeglądarki i wersję przeglądarki.

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

Rozważ udzielenie wyjaśnienia Twojej odpowiedzi – arghtype

+0

Aby uzyskać informacje o IE11. umieść ten kod na powyższym przykładzie. –

0

nie można wiarygodnie uzyskać te informacje. Podstawą wielu odpowiedzi tutaj dostarczonych jest zbadanie nagłówka User-Agent żądania HTTP. Jednak nie ma sposobu, aby dowiedzieć się, czy informacje w nagłówku User-Agent są zgodne z prawdą. Klient wysyłający żądanie może napisać cokolwiek w tym nagłówku. Więc jego treść może zostać sfałszowana lub w ogóle nie wysłana.

2

Istnieją dwa nie złe libs celu analizowania ciągów agenta użytkownika:

Powiązane problemy