文章目录
根据userAgent获取浏览器/操作系统/设备类型等信息
一、背景
因为需求需要不断的和userAgent打交道,需要解析出各种信息,如:浏览器名字,浏览器组,浏览器类型,浏览器版本,浏览器的渲染引擎,android和ios设备的类型,操作系统相关信息等等,这里我将自己写的获取userAgent的相关信息的类分享出来。以备后用
之前也写过一个简洁版的,获取user-agent里的信息并解析出device type(设备类型)和os version(操作系统的版本号)
– 以下方法自己均测试通过
二、效果展示
这里先展示数据,后面上代码,在最后我给出代码的下载链接
Android:userAgent解析出来的信息
ios:userAgent解析出来的信息
注意:ios无法获取浏览器的版本号,具体原因还不太清楚,希望知道的在评论区留言告知,感激不尽。
windows:userAgent解析出来的信息
三、准备工具
我这里解析userAgent信息是采用的UserAgentUtils 类。
3.1 导入UserAgentUtils 到pom.xml
- 在maven中央仓库搜索UserAgentUtils ,复制pom文件
- 或者copy我下面的引用
<!-- UserAgentUtils -->
<!-- https://mvnrepository.com/artifact/eu.bitwalker/UserAgentUtils -->
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.20</version>
</dependency>
四、解析出userAgent的所有信息
注意: 以下代码均为本人亲测可行。如果有什么写的不对的地方,敬请指出。
package com.ninesword.nsclick.utils;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import eu.bitwalker.useragentutils.Browser;
import eu.bitwalker.useragentutils.OperatingSystem;
import eu.bitwalker.useragentutils.UserAgent;
/**
* @author 作者 : 小雪
* @date 创建时间:2018年9月19日 下午2:45:10
* @version 1.0
* @parameter
* @since
* @return
*/
public class UserAgentUtils {
private static Logger logger = LoggerFactory.getLogger(UserAgentUtils.class);
/**
* 根据http获取userAgent信息
* @param request
* @return
*/
public static String getUserAgent(HttpServletRequest request) {
String userAgent=request.getHeader("User-Agent");
return userAgent;
}
/**
* 根据request获取userAgent,然后解析出osVersion
* @param request
* @return
*/
public static String getOsVersion(HttpServletRequest request) {
String userAgent = getUserAgent(request);
return getOsVersion(userAgent);
}
/**
* 根据userAgent解析出osVersion
* @param userAgent
* @return
*/
public static String getOsVersion(String userAgent) {
String osVersion = "";
if(StringUtils.isBlank(userAgent))
return osVersion;
String[] strArr = userAgent.substring(userAgent.indexOf("(")+1,
userAgent.indexOf(")")).split(";");
if(null == strArr || strArr.length == 0)
return osVersion;
osVersion = strArr[1];
logger.info("osVersion is:{}", osVersion);
return osVersion;
}
/**
* 获取操作系统对象
* @param request
* @return
*/
private static OperatingSystem getOperatingSystem(String userAgent) {
UserAgent agent = UserAgent.parseUserAgentString(userAgent);
OperatingSystem operatingSystem = agent.getOperatingSystem();
return operatingSystem;
}
/**
* 获取os:Windows/ios/Android
* @param request
* @return
*/
public static String getOs(HttpServletRequest request) {
String userAgent = getUserAgent(request);
return getOs(userAgent);
}
/**
* 获取os:Windows/ios/Android
* @param request
* @return
*/
public static String getOs(String userAgent) {
OperatingSystem operatingSystem = getOperatingSystem(userAgent);
String os = operatingSystem.getGroup().getName();
logger.info("os is:{}", os);
return os;
}
/**
* 获取deviceType
* @param request
* @return
*/
public static String getDevicetype(HttpServletRequest request) {
String userAgent = getUserAgent(request);
return getDevicetype(userAgent);
}
/**
* 获取deviceType
* @param request
* @return
*/
public static String getDevicetype(String userAgent) {
OperatingSystem operatingSystem = getOperatingSystem(userAgent);
String deviceType = operatingSystem.getDeviceType().toString();
logger.info("deviceType is:{}", deviceType);
return deviceType;
}
/**
* 获取操作系统的名字
* @param request
* @return
*/
public static String getOsName(HttpServletRequest request) {
String userAgent = getUserAgent(request);
return getOsName(userAgent);
}
/**
* 获取操作系统的名字
* @param request
* @return
*/
public static String getOsName(String userAgent) {
OperatingSystem operatingSystem = getOperatingSystem(userAgent);
String osName = operatingSystem.getName();
logger.info("osName is:{}", osName);
return osName;
}
/**
* 获取device的生产厂家
* @param request
*/
public static String getDeviceManufacturer(HttpServletRequest request) {
String userAgent = getUserAgent(request);
return getDeviceManufacturer(userAgent);
}
/**
* 获取device的生产厂家
* @param request
*/
public static String getDeviceManufacturer(String userAgent) {
OperatingSystem operatingSystem = getOperatingSystem(userAgent);
String deviceManufacturer = operatingSystem.getManufacturer().toString();
logger.info("deviceManufacturer is:{}", deviceManufacturer);
return deviceManufacturer;
}
/**
* 获取浏览器对象
* @param request
* @return
*/
public static Browser getBrowser(String agent) {
UserAgent userAgent = UserAgent.parseUserAgentString(agent);
Browser browser = userAgent.getBrowser();
return browser;
}
/**
* 获取browser name
* @param request
* @return
*/
public static String getBorderName(HttpServletRequest request) {
String userAgent = getUserAgent(request);
return getBorderName(userAgent);
}
/**
* 获取browser name
* @param request
* @return
*/
public static String getBorderName(String userAgent) {
Browser browser = getBrowser(userAgent);
String borderName = browser.getName();
logger.info("borderName is:{}", borderName);
return borderName;
}
/**
* 获取浏览器的类型
* @param request
* @return
*/
public static String getBorderType(HttpServletRequest request) {
String userAgent = getUserAgent(request);
return getBorderType(userAgent);
}
/**
* 获取浏览器的类型
* @param request
* @return
*/
public static String getBorderType(String userAgent) {
Browser browser = getBrowser(userAgent);
String borderType = browser.getBrowserType().getName();
logger.info("borderType is:{}", borderType);
return borderType;
}
/**
* 获取浏览器组: CHROME、IE
* @param request
* @return
*/
public static String getBorderGroup(HttpServletRequest request) {
String userAgent = getUserAgent(request);
return getBorderGroup(userAgent);
}
/**
* 获取浏览器组: CHROME、IE
* @param request
* @return
*/
public static String getBorderGroup(String userAgent) {
Browser browser = getBrowser(userAgent);
String browerGroup = browser.getGroup().getName();
logger.info("browerGroup is:{}", browerGroup);
return browerGroup;
}
/**
* 获取浏览器的生产厂商
* @param request
* @return
*/
public static String getBrowserManufacturer(HttpServletRequest request) {
String userAgent = getUserAgent(request);
return getBrowserManufacturer(userAgent);
}
/**
* 获取浏览器的生产厂商
* @param request
* @return
*/
public static String getBrowserManufacturer(String userAgent) {
Browser browser = getBrowser(userAgent);
String browserManufacturer = browser.getManufacturer().getName();
logger.info("browserManufacturer is:{}", browserManufacturer);
return browserManufacturer;
}
/**
* 获取浏览器使用的渲染引擎
* @param request
* @return
*/
public static String getBorderRenderingEngine(HttpServletRequest request) {
String userAgent = getUserAgent(request);
return getBorderRenderingEngine(userAgent);
}
/**
* 获取浏览器使用的渲染引擎
* @param request
* @return
*/
public static String getBorderRenderingEngine(String userAgent) {
Browser browser = getBrowser(userAgent);
String renderingEngine = browser.getRenderingEngine().name();
logger.info("renderingEngine is:{}", renderingEngine);
return renderingEngine;
}
/**
* 获取浏览器版本
* @param request
* @return
*/
public static String getBrowserVersion(HttpServletRequest request) {
String userAgent = getUserAgent(request);
return getBrowserVersion(userAgent);
}
/**
* 获取浏览器版本
* @param request
* @return
*/
public static String getBrowserVersion(String userAgent) {
Browser browser = getBrowser(userAgent);
String borderVersion = browser.getVersion( userAgent).toString();
return borderVersion;
}
public static void main(String[] args) {
// String androidUserAgent = "Mozilla/5.0 (Linux; Android 8.0; LON-AL00 Build/HUAWEILON-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044204 Mobile Safari/537.36 V1_AND_SQ_7.7.8_908_YYB_D QQ/7.7.8.3705 NetType/WIFI WebP/0.3.0 Pixel/1440";
// String iosUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16A366 QQ/7.7.8.421 V1_IPH_SQ_7.7.8_1_APP_A Pixel/750 Core/UIWebView Device/Apple(iPhone 6s) NetType/WIFI QBWebViewType/1";
String winUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36";
System.out.println("浏览器组:"+getBorderGroup(winUserAgent));
System.out.println("浏览器名字:"+getBorderName(winUserAgent));
System.out.println("浏览器类型"+getBorderType(winUserAgent));
System.out.println("浏览器生产商:"+getBrowserManufacturer(winUserAgent));
System.out.println("浏览器版本:"+getBrowserVersion(winUserAgent));
System.out.println("设备生产厂商:"+getDeviceManufacturer(winUserAgent));
System.out.println("设备类型:"+getDevicetype(winUserAgent));
System.out.println("设备操作系统:"+getOs(winUserAgent));
System.out.println("操作系统的名字:"+getOsName(winUserAgent));
System.out.println("操作系统的版本号:"+getOsVersion(winUserAgent));
System.out.println("操作系统浏览器的渲染引擎:"+getBorderRenderingEngine(winUserAgent));
}
}
五、源码下载
虽然上面基本上已经给出了源码,我还是再给一遍。方便直接运行
java解析userAgent中的所有信息
版权声明:本文为qq_23832313原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。