JSP, Servlet을 사용하여 웹 응용 프로그램을 개발하고 있습니다.OS 및 브라우저와 같은 클라이언트 정보를 얻는 방법은 무엇입니까?
고객이 내 웹 사이트를 사용할 때마다 운영 체제, 브라우저, 해상도 등의 클라이언트 정보를 얻고 싶습니다.
JSP, Servlet을 사용하여 웹 응용 프로그램을 개발하고 있습니다.OS 및 브라우저와 같은 클라이언트 정보를 얻는 방법은 무엇입니까?
고객이 내 웹 사이트를 사용할 때마다 운영 체제, 브라우저, 해상도 등의 클라이언트 정보를 얻고 싶습니다.
브라우저는이 정보를 HTTP 헤더로 보냅니다. 몇 가지 코드 (source, online demo)는 톰캣 snoop example을 참조하십시오.
이 정보는 신뢰할 수 없습니다. 브라우저는 그들이 누구이며 어떤 OS에서 작동하는지에 대해 거짓말을 할 수 있습니다.
가장 좋은 건 사용자 에이전트 헤더입니다. 당신은
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로 분류됩니다.
당신은
사용자 에이전트를 사용하면 브라우저의 정확한 버전을 알 수 있습니다,이 웹 사이트에서 모든 사용자 에이전트 값의 전체 목록을 얻을 수 있습니다. OS에 대해서는 꽤 좋은 아이디어를 얻을 수 있지만 동일한 OS의 다른 버전을 구별하지 못할 수도 있습니다. 예를 들어, Windows NT와 2000은 동일한 User-Agent를 사용할 수 있습니다.
해결 방법은 없습니다. 그러나 AJAX 호출에서 Javascript를 사용하여이 작업을 수행 할 수 있습니다.
그 정보는 당연한 것으로 받아 들여지지 않습니다. 사용자 에이전트는 User-Agent 헤더를 전혀 제공하지 않거나 거짓말 할 수 있습니다. 두 가지 모두 드문 경우지만, 정보에 의존한다면 사실을 염두에 두어야합니다. –
@JoachimSauer 사용자 에이전트가 User-Agent 헤더를 제공하지 않거나 거짓말 할 수있는 경우를 말할 수 있습니까? – RAS
@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 /)와 다른 모든 브라우저에 대해서도 마찬가지입니다. –
자바에서는 브라우저 및 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);
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);
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];
}
답변에 대한 설명 제공을 고려하십시오. – arghtype
IE11 정보를 얻으려면. 위의 예제와 함께이 코드를 넣으십시오. –
당신은 안정적으로이 정보를 얻을 수 없습니다. 여기서 제공되는 몇 가지 답변의 기본은 HTTP 요청의 User-Agent 헤더를 검사하는 것입니다. 그러나 User-Agent 헤더의 정보가 사실인지 알 수있는 방법이 없습니다. 요청을 보내는 클라이언트는 해당 헤더에 아무 것도 쓸 수 있습니다. 따라서 해당 콘텐츠는 스푸핑되거나 전혀 전송되지 않을 수 있습니다.
분석 사용자 에이전트 문자열이 나쁜 libs가 있습니다
모두 링크가 다국어를하고, 적극적으로 유지하기 위해 관리는 지금 죽었어. – Stefan
@ 스 테판 : 감사합니다. –