個人博客 地址:http://www.wenhaofan.com/article/20181125220342
在開發AutuBlog項目時需要做后台的登錄記錄,想起瀏覽器的User-Agent,於是嘗試從瀏覽器的請求頭中獲取一些有用的信息。
通過總結大量請求頭數據寫出以下正則
^Mozilla/\d\.\d\s+\(+.+?\)
該正則含義為
以Mozilla/開頭+瀏覽器版本格式為數字.數字+空格+(+任意字符串+匹配第一個)
測試數據
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:36.0) Gecko/20100101 Firefox/36.0
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
經測試可以順利的獲取到設備 以及操作系統信息
完整工具類代碼如下
package com.autu.common.kit; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; public class AgentUserKit { private static String pattern = "^Mozilla/\\d\\.\\d\\s+\\(+.+?\\)"; private static String pattern2 = "\\(+.+?\\)"; private static Pattern r = Pattern.compile(pattern); private static Pattern r2 = Pattern.compile(pattern2); public static String getDeviceInfo(HttpServletRequest request) { String userAgent = request.getHeader("User-Agent"); return getDeviceInfo(userAgent); } private static String getDeviceInfo(String userAgent) { Matcher m = r.matcher(userAgent); String result = null; if (m.find()) { result = m.group(0); } Matcher m2 = r2.matcher(result); if (m2.find()) { result = m2.group(0); } result = result.replace("(", ""); result = result.replace(")", ""); return filterDeviceInfo(result); } public static String filterDeviceInfo(String result) { if (StrKit.isBlank(result)) { return null; } result = result.replace(" U;", ""); result = result.replace(" zh-cn;", ""); return result; } public static void main(String[] args) { System.out.println(getDeviceInfo( "Mozilla/5.0 (Linux; U; Android 7.0; zh-cn; MI 5s Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.128 Mobile Safari/537.36 XiaoMi/MiuiBrowser/10.2.2")); } }如果有發現不能匹配的請求頭歡迎留言