Java 程序-利用UserAgent判断客户端系统平台及浏览器的

来源:互联网 发布:上海爱回收java 编辑:程序博客网 时间:2024/05/16 05:05
  现在很多网站都支持判断客户端平台、浏览器,比如新浪微博、http://zww.me/。个人总结了一下根据 User Agent String 判断客户端的 Java 程序,未完待续,作者有空的话会随时更新,目前只支持主流的几个平台和浏览器。也希望朋友们可以进行补充,如果有什么好的意见可以跟帖留言,毕竟个人的力量是有限的,谢谢。

        数据封装的 UserAgent 代码如下:

[java] view plaincopyprint?
  1. package com.defonds.sample.web.entity;  
  2.   
  3. /** 
  4.  * 根据 user agent string 来判断出客户端的浏览器以及平台等信息 
  5.  * @author Defonds 
  6.  */  
  7. public class UserAgent {  
  8.     private String browserType;//浏览器类型  
  9.     private String browserVersion;//浏览器版本  
  10.     private String platformType;//平台类型  
  11.     private String platformSeries;//平台系列  
  12.     private String platformVersion;//平台版本  
  13.       
  14.     public UserAgent(){}  
  15.       
  16.     public UserAgent(String browserType, String browserVersion,  
  17.             String platformType, String platformSeries, String platformVersion){  
  18.         this.browserType = browserType;  
  19.         this.browserVersion = browserVersion;  
  20.         this.platformType = platformType;  
  21.         this.platformSeries = platformSeries;  
  22.         this.platformVersion = platformVersion;  
  23.     }  
  24.       
  25.     public String getBrowserType() {  
  26.         return browserType;  
  27.     }  
  28.     public void setBrowserType(String browserType) {  
  29.         this.browserType = browserType;  
  30.     }  
  31.     public String getBrowserVersion() {  
  32.         return browserVersion;  
  33.     }  
  34.     public void setBrowserVersion(String browserVersion) {  
  35.         this.browserVersion = browserVersion;  
  36.     }  
  37.     public String getPlatformType() {  
  38.         return platformType;  
  39.     }  
  40.     public void setPlatformType(String platformType) {  
  41.         this.platformType = platformType;  
  42.     }  
  43.     public String getPlatformSeries() {  
  44.         return platformSeries;  
  45.     }  
  46.     public void setPlatformSeries(String platformSeries) {  
  47.         this.platformSeries = platformSeries;  
  48.     }  
  49.     public String getPlatformVersion() {  
  50.         return platformVersion;  
  51.     }  
  52.     public void setPlatformVersion(String platformVersion) {  
  53.         this.platformVersion = platformVersion;  
  54.     }  
  55.       
  56. }  

        判断处理的 UserAgentUtil 代码如下:

[java] view plaincopyprint?
  1. package com.defonds.sample.common.util;  
  2.   
  3. import org.apache.commons.lang.StringUtils;  
  4.   
  5. import com.defonds.sample.web.entity.UserAgent;  
  6.   
  7.   
  8. /** 
  9.  * 根据 user agent string 判断用户的平台、浏览器 
  10.  * 参考资料 
  11.  * ************************************************************************************************************************************************** 
  12.  *  
  13.  * 台式机 
  14.  *  
  15.  * Linux Ubuntu 
  16.  * Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.2pre) Gecko/20100225 Ubuntu/9.10 (karmic) Namoroka/3.6.2pre 
  17.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  18.  * Linux Mandriva 2008.1 
  19.  * Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008072403 Mandriva/3.0.1-1mdv2008.1 (2008.1) Firefox/3.0.1 
  20.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  21.  * Linux suSE 10.1 
  22.  * Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.3) Gecko/20060425 SUSE/1.5.0.3-7 Firefox/1.5.0.31 
  23.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  24.  * Windows XP SP3 
  25.  * Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729) 
  26.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  27.  * Windows Vista 
  28.  * Mozilla/5.0 (Windows; U; Windows NT 6.1; nl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 
  29.  * Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729) 
  30.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  31.  * windows 2000 
  32.  * Mozilla/5.0 (Windows; U; Windows NT 5.0; en-GB; rv:1.8.1b2) Gecko/20060821 Firefox/2.0b2 
  33.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  34.  * Windows 7 
  35.  * Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1 
  36.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  37.  * Windows Server 2008 
  38.  * Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) 
  39.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  40.  * iMac OSX 10.7.4 
  41.  * Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1 
  42.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  43.  * Mac OS X 
  44.  * Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9 
  45.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  46.  *  
  47.  * 手持设备 
  48.  *  
  49.  * iPad 
  50.  * Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10 
  51.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  52.  * iPad 2 
  53.  * Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X; en-us) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3 
  54.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  55.  * iPhone 4 
  56.  * Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7 
  57.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  58.  * iPhone 5 
  59.  * Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3 
  60.  * -------------------------------------------------------------------------------------------------------------------------------------------------- 
  61.  * Android 
  62.  * Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 
  63.  * ************************************************************************************************************************************************** 
  64.  * @author Defonds 
  65.  */  
  66. public class UserAgentUtil {  
  67.   
  68.     /** 
  69.      * 用途:根据客户端 User Agent Strings 判断其浏览器、操作平台 
  70.      * if 判断的先后次序: 
  71.      * 根据设备的用户使用量降序排列,这样对于大多数用户来说可以少判断几次即可拿到结果: 
  72.      *  >>操作系统:Windows > 苹果 > 安卓 > Linux > ... 
  73.      *  >>Browser:Chrome > FF > IE > ... 
  74.      * @param userAgentStr 
  75.      * @return 
  76.      */  
  77.     public static UserAgent getUserAgent(String userAgent) {  
  78.         if (StringUtils.isBlank(userAgent)) {  
  79.             return null;  
  80.         }   
  81.           
  82.         if (userAgent.contains("Windows")) {//主流应用靠前  
  83.             /** 
  84.              * ****************** 
  85.              * 台式机 Windows 系列 
  86.              * ****************** 
  87.              * Windows NT 6.2   -   Windows 8 
  88.              * Windows NT 6.1   -   Windows 7 
  89.              * Windows NT 6.0   -   Windows Vista 
  90.              * Windows NT 5.2   -   Windows Server 2003; Windows XP x64 Edition 
  91.              * Windows NT 5.1   -   Windows XP 
  92.              * Windows NT 5.01  -   Windows 2000, Service Pack 1 (SP1) 
  93.              * Windows NT 5.0   -   Windows 2000 
  94.              * Windows NT 4.0   -   Microsoft Windows NT 4.0 
  95.              * Windows 98; Win 9x 4.90  -   Windows Millennium Edition (Windows Me) 
  96.              * Windows 98   -   Windows 98 
  97.              * Windows 95   -   Windows 95 
  98.              * Windows CE   -   Windows CE 
  99.              * 判断依据:http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx 
  100.              */  
  101.             if (userAgent.contains("Windows NT 6.2")) {//Windows 8  
  102.                 return judgeBrowser(userAgent, "Windows""8" , null);//判断浏览器  
  103.             } else if (userAgent.contains("Windows NT 6.1")) {//Windows 7  
  104.                 return judgeBrowser(userAgent, "Windows""7" , null);  
  105.             } else if (userAgent.contains("Windows NT 6.0")) {//Windows Vista  
  106.                 return judgeBrowser(userAgent, "Windows""Vista" , null);  
  107.             } else if (userAgent.contains("Windows NT 5.2")) {//Windows XP x64 Edition  
  108.                 return judgeBrowser(userAgent, "Windows""XP" , "x64 Edition");  
  109.             } else if (userAgent.contains("Windows NT 5.1")) {//Windows XP  
  110.                 return judgeBrowser(userAgent, "Windows""XP" , null);  
  111.             } else if (userAgent.contains("Windows NT 5.01")) {//Windows 2000, Service Pack 1 (SP1)  
  112.                 return judgeBrowser(userAgent, "Windows""2000" , "SP1");  
  113.             } else if (userAgent.contains("Windows NT 5.0")) {//Windows 2000  
  114.                 return judgeBrowser(userAgent, "Windows""2000" , null);  
  115.             } else if (userAgent.contains("Windows NT 4.0")) {//Microsoft Windows NT 4.0  
  116.                 return judgeBrowser(userAgent, "Windows""NT 4.0" , null);  
  117.             } else if (userAgent.contains("Windows 98; Win 9x 4.90")) {//Windows Millennium Edition (Windows Me)  
  118.                 return judgeBrowser(userAgent, "Windows""ME" , null);  
  119.             } else if (userAgent.contains("Windows 98")) {//Windows 98  
  120.                 return judgeBrowser(userAgent, "Windows""98" , null);  
  121.             } else if (userAgent.contains("Windows 95")) {//Windows 95  
  122.                 return judgeBrowser(userAgent, "Windows""95" , null);  
  123.             } else if (userAgent.contains("Windows CE")) {//Windows CE  
  124.                 return judgeBrowser(userAgent, "Windows""CE" , null);  
  125.             }   
  126.         } else if (userAgent.contains("Mac OS X")) {  
  127.             /** 
  128.              * ******** 
  129.              * 苹果系列 
  130.              * ******** 
  131.              * iPod -       Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8G4 Safari/6533.18.5 
  132.              * iPad -       Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10 
  133.              * iPad2    -       Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X; en-us) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3 
  134.              * iPhone 4 -   Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7 
  135.              * iPhone 5 -   Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3 
  136.              * 判断依据:http://www.useragentstring.com/pages/Safari/ 
  137.              * 参考:http://stackoverflow.com/questions/7825873/what-is-the-ios-5-0-user-agent-string 
  138.              * 参考:http://stackoverflow.com/questions/3105555/what-is-the-iphone-4-user-agent 
  139.              */  
  140.             if (userAgent.contains("iPod")) {  
  141.                 return judgeBrowser(userAgent, "iPod"null , null);//判断浏览器  
  142.             }  
  143.         }  
  144.         return null;  
  145.     }  
  146.       
  147.     /** 
  148.      * 用途:根据客户端 User Agent Strings 判断其浏览器 
  149.      * if 判断的先后次序: 
  150.      * 根据浏览器的用户使用量降序排列,这样对于大多数用户来说可以少判断几次即可拿到结果: 
  151.      *  >>Browser:Chrome > FF > IE > ... 
  152.      * @param userAgent:user agent 
  153.      * @param platformType:平台 
  154.      * @param platformSeries:系列 
  155.      * @param platformVersion:版本 
  156.      * @return 
  157.      */  
  158.     private static UserAgent judgeBrowser(String userAgent, String platformType, String platformSeries, String platformVersion) {  
  159.         if (userAgent.contains("Chrome")) {  
  160.             /** 
  161.              * *********** 
  162.              * Chrome 系列 
  163.              * *********** 
  164.              * Chrome 24.0.1295.0   -   Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15 
  165.              * Chrome 24.0.1292.0   -   Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.14 (KHTML, like Gecko) Chrome/24.0.1292.0 Safari/537.14 
  166.              * Chrome 24.0.1290.1   -   Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13 
  167.              * 判断依据:http://www.useragentstring.com/pages/Chrome/ 
  168.              */  
  169.             String temp = userAgent.substring(userAgent.indexOf("Chrome/") + 7);//拿到User Agent String "Chrome/" 之后的字符串,结果形如"24.0.1295.0 Safari/537.15"或"24.0.1295.0"  
  170.             String chromeVersion = null;  
  171.             if (temp.indexOf(" ") < 0) {//temp形如"24.0.1295.0"  
  172.                 chromeVersion = temp;  
  173.             } else {//temp形如"24.0.1295.0 Safari/537.15"  
  174.                 chromeVersion = temp.substring(0, temp.indexOf(" "));  
  175.             }  
  176.             return new UserAgent("Chrome", chromeVersion, platformType, platformSeries, platformVersion);  
  177.         } else if (userAgent.contains("Firefox")) {  
  178.             /** 
  179.              * ******* 
  180.              * FF 系列 
  181.              * ******* 
  182.              * Firefox 16.0.1   -   Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1 
  183.              * Firefox 15.0a2   -   Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2 
  184.              * Firefox 15.0.2   -   Mozilla/5.0 (Windows NT 6.2; WOW64; rv:15.0) Gecko/20120910144328 Firefox/15.0.2 
  185.              * 判断依据:http://www.useragentstring.com/pages/Firefox/ 
  186.              */  
  187.             String temp = userAgent.substring(userAgent.indexOf("Firefox/") + 8);//拿到User Agent String "Firefox/" 之后的字符串,结果形如"16.0.1 Gecko/20121011"或"16.0.1"  
  188.             String ffVersion = null;  
  189.             if (temp.indexOf(" ") < 0) {//temp形如"16.0.1"  
  190.                 ffVersion = temp;  
  191.             } else {//temp形如"16.0.1 Gecko/20121011"  
  192.                 ffVersion = temp.substring(0, temp.indexOf(" "));  
  193.             }  
  194.             return new UserAgent("Firefox", ffVersion, platformType, platformSeries, platformVersion);  
  195.         } else if (userAgent.contains("MSIE")) {  
  196.             /** 
  197.              * ******* 
  198.              * IE 系列 
  199.              * ******* 
  200.              * MSIE 10.0    -   Internet Explorer 10 
  201.              * MSIE 9.0 -   Internet Explorer 9 
  202.              * MSIE 8.0 -   Internet Explorer 8 or IE8 Compatibility View/Browser Mode 
  203.              * MSIE 7.0 -   Windows Internet Explorer 7 or IE7 Compatibility View/Browser Mode 
  204.              * MSIE 6.0 -   Microsoft Internet Explorer 6 
  205.              * 判断依据:http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx 
  206.              */  
  207.             if (userAgent.contains("MSIE 10.0")) {//Internet Explorer 10  
  208.                 return new UserAgent("Internet Explorer""10", platformType, platformSeries, platformVersion);  
  209.             } else if (userAgent.contains("MSIE 9.0")) {//Internet Explorer 9  
  210.                 return new UserAgent("Internet Explorer""9", platformType, platformSeries, platformVersion);  
  211.             } else if (userAgent.contains("MSIE 8.0")) {//Internet Explorer 8  
  212.                 return new UserAgent("Internet Explorer""8", platformType, platformSeries, platformVersion);  
  213.             } else if (userAgent.contains("MSIE 7.0")) {//Internet Explorer 7  
  214.                 return new UserAgent("Internet Explorer""7", platformType, platformSeries, platformVersion);  
  215.             } else if (userAgent.contains("MSIE 6.0")) {//Internet Explorer 6  
  216.                 return new UserAgent("Internet Explorer""6", platformType, platformSeries, platformVersion);  
  217.             }  
  218.         } else {//暂时支持以上三个主流.其它浏览器,待续...  
  219.             return new UserAgent(nullnull, platformType, platformSeries, platformVersion);  
  220.         }  
  221.         return null;  
  222.     }  
  223. }  

        后记,同事分享了一个 PHP 版的 User Agent String 判断客户端的源代码,支持的比较全,大家也可以参考一下。部分代码摘录如下:

[php] view plaincopyprint?
  1. function CID_windows_detect_os($ua) {  
  2.   
  3.     $os_name = $os_code = $os_ver = $pda_name = $pda_code = $pda_ver = null;  
  4.   
  5.   
  6.   
  7.     if (preg_match('/Windows 95/i'$ua) || preg_match('/Win95/'$ua)) {  
  8.   
  9.         $os_name = "Windows";  
  10.   
  11.         $os_code = "windows";  
  12.   
  13.         $os_ver = "95";  
  14.   
  15.     } elseif (preg_match('/Windows NT 5.0/i'$ua) || preg_match('/Windows 2000/i'$ua)) {  
  16.   
  17.         $os_name = "Windows";  
  18.   
  19.         $os_code = "windows";  
  20.   
  21.         $os_ver = "2000";  
  22.   
  23.     } elseif (preg_match('/Win 9x 4.90/i'$ua) || preg_match('/Windows ME/i'$ua)) {  
  24.   
  25.         $os_name = "Windows";  
  26.   
  27.         $os_code = "windows";  
  28.   
  29.         $os_ver = "ME";  
  30.   
  31.     } elseif (preg_match('/Windows.98/i'$ua) || preg_match('/Win98/i'$ua)) {  
  32.   
  33.         $os_name = "Windows";  
  34.   
  35.         $os_code = "windows";  
  36.   
  37.         $os_ver = "98";  
  38.   
  39.     } elseif (preg_match('/Windows NT 6.0/i'$ua)) {  
  40.   
  41.         $os_name = "Windows";  
  42.   
  43.         $os_code = "windows_vista";  
  44.   
  45.         $os_ver = "Vista";  
  46.   
  47.     } elseif (preg_match('/Windows NT 6.1/i'$ua)) {  
  48.   
  49.         $os_name = "Windows";  
  50.   
  51.         $os_code = "windows_win7";  
  52.   
  53.         $os_ver = "7";        
  54.   
  55.     } elseif (preg_match('/Windows NT 5.1/i'$ua)) {  
  56.   
  57.         $os_name = "Windows";  
  58.   
  59.         $os_code = "windows";  
  60.   
  61.         $os_ver = "XP";  
  62.   
  63.     } elseif (preg_match('/Windows NT 5.2/i'$ua)) {  
  64.   
  65.         $os_name = "Windows";  
  66.   
  67.         $os_code = "windows";  
  68.   
  69.         if (preg_match('/Win64/i'$ua)) {  
  70.   
  71.             $os_ver = "XP 64 bit";  
  72.   
  73.         } else {  
  74.   
  75.             $os_ver = "Server 2003";  
  76.   
  77.         }  
  78.   
  79.     }  
  80.   
  81.     elseif (preg_match('/Mac_PowerPC/i'$ua)) {  
  82.   
  83.         $os_name = "Mac OS";  
  84.   
  85.         $os_code = "macos";  
  86.   
  87.     }elseif (preg_match('/Windows Phone/i'$ua)) {  
  88.   
  89.         $matches = explode(';',$ua);  
  90.   
  91.         $os_name = $matches[2];  
  92.   
  93.         $os_code = "windows_phone7";  
  94.   
  95.     } elseif (preg_match('/Windows NT 4.0/i'$ua) || preg_match('/WinNT4.0/i'$ua)) {  
  96.   
  97.         $os_name = "Windows";  
  98.   
  99.         $os_code = "windows";  
  100.   
  101.         $os_ver = "NT 4.0";  
  102.   
  103.     } elseif (preg_match('/Windows NT/i'$ua) || preg_match('/WinNT/i'$ua)) {  
  104.   
  105.         $os_name = "Windows";  
  106.   
  107.         $os_code = "windows";  
  108.   
  109.         $os_ver = "NT";  

        以上 Java 版和 PHP 版的根据 User Agent String 判断客户端的源程序都已上传 Csdn 资源,有兴趣的朋友可以去下载下来看看。下载地址:根据User Agent String判断客户端平台及浏览器源程序[Java和PHP版]
0 0
原创粉丝点击