2009-08-25 2 views

답변

5

브라우저는이 정보를 HTTP 헤더로 보냅니다. 몇 가지 코드 (source, online demo)는 톰캣 snoop example을 참조하십시오.

이 정보는 신뢰할 수 없습니다. 브라우저는 그들이 누구이며 어떤 OS에서 작동하는지에 대해 거짓말을 할 수 있습니다.

+0

모두 링크가 다국어를하고, 적극적으로 유지하기 위해 관리는 지금 죽었어. – Stefan

+0

@ 스 테판 : 감사합니다. –

45

가장 좋은 건 사용자 에이전트 헤더입니다. 당신은

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 

그것은 브라우저에 대한 자세한 정보를 제공합니다, 그것은

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

헤더는 다음과 같습니다, JSP 나 서블릿이 좋아 얻을 수 있습니다. 그러나 거의 모든 형식을 해독하기가 매우 어렵습니다. 각 브라우저에 대해 파서를 지원하고 쓰는 브라우저를 알아 내면됩니다. 브라우저의 버전을 확인하려고 할 때 항상 최신 버전을 먼저 확인하십시오. 예를 들어 IE6 ​​사용자 에이전트는 역 호환성을 위해 IE5를 포함 할 수 있습니다. IE5를 먼저 확인하면 IE6도 IE5로 분류됩니다.

당신은

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

사용자 에이전트를 사용하면 브라우저의 정확한 버전을 알 수 있습니다,이 웹 사이트에서 모든 사용자 에이전트 값의 전체 목록을 얻을 수 있습니다. OS에 대해서는 꽤 좋은 아이디어를 얻을 수 있지만 동일한 OS의 다른 버전을 구별하지 못할 수도 있습니다. 예를 들어, Windows NT와 2000은 동일한 User-Agent를 사용할 수 있습니다.

해결 방법은 없습니다. 그러나 AJAX 호출에서 Javascript를 사용하여이 작업을 수행 할 수 있습니다.

+3

그 정보는 당연한 것으로 받아 들여지지 않습니다. 사용자 에이전트는 User-Agent 헤더를 전혀 제공하지 않거나 거짓말 할 수 있습니다. 두 가지 모두 드문 경우지만, 정보에 의존한다면 사실을 염두에 두어야합니다. –

+0

@JoachimSauer 사용자 에이전트가 User-Agent 헤더를 제공하지 않거나 거짓말 할 수있는 경우를 말할 수 있습니까? – RAS

+1

@RAS : Opera는 예를 들어 사용자가 보내는 사용자 에이전트를 선택할 수 있습니다 (다른 OS에서 Firefox, Chrome 또는 IE를 가장합니다). [Chrome] (https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg), [Firefox] (https://addons.mozilla.org/)에 대한 확장 프로그램이 있습니다. de/firefox/addon/user-agent-switcher /)와 다른 모든 브라우저에 대해서도 마찬가지입니다. –

34

자바에서는 브라우저 및 OS 관련 정보를 직접 얻을 방법이 없습니다.

하지만 타사 도구를 구할 수 있습니다.

제 3 자 도구를 신뢰하는 대신 사용자 에이전트을 구문 분석하도록 제안합니다.

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

이렇게하면 요구 사항에 따라 브라우저 세부 정보와 OS 관련 정보를 쉽게 구분할 수 있습니다. 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); 
+0

Chrome에서 작동하지만 IE11에서는 작동하지 않습니다. – oshai

+0

이것은 사용자 에이전트가 보이는 방식입니다. IE11 >> [Mozilla/5.0 (Windows NT 6.3, Trident/7.0, rv : 11.0)]과 같습니다. 그래서 probly 당신이 "rv"를 다루는 다른 조건이라면 하나 더 추가해야하고, 그것을 바탕으로 IE11 여부를 결정할 수 있습니다. 참고 MSIE는 이전 버전 IE10 이하입니다. – lambodar

+0

은 IE11에 대한 지원을 추가했습니다. – lambodar

10

bitwalker useragentutils 라이브러리는 https://github.com/HaraldWalker/user-agent-utils입니다. 브라우저 (이름, 유형, 버전, 제조업체 등) 및 OperatingSystem에 대한 정보를 제공합니다. 그것에 대해 좋은 점은 그것이 유지된다는 것입니다. 제공 한 링크에 액세스하여 프로젝트에 추가해야하는 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); 
-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

답변에 대한 설명 제공을 고려하십시오. – arghtype

+0

IE11 정보를 얻으려면. 위의 예제와 함께이 코드를 넣으십시오. –

0

당신은 안정적으로이 정보를 얻을 수 없습니다. 여기서 제공되는 몇 가지 답변의 기본은 HTTP 요청의 User-Agent 헤더를 검사하는 것입니다. 그러나 User-Agent 헤더의 정보가 사실인지 알 수있는 방법이 없습니다. 요청을 보내는 클라이언트는 해당 헤더에 아무 것도 쓸 수 있습니다. 따라서 해당 콘텐츠는 스푸핑되거나 전혀 전송되지 않을 수 있습니다.

관련 문제