根据userAgent获取浏览器/操作系统/设备类型等信息
文章目录
- 根据userAgent获取浏览器/操作系统/设备类型等信息
- 一、背景
- 二、效果展示
- Android:userAgent解析出来的信息
- ios:userAgent解析出来的信息
- windows:userAgent解析出来的信息
- 三、准备工具
- 3.1 导入UserAgentUtils 到pom.xml
- 四、解析出userAgent的所有信息
- 五、源码下载
根据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中的所有信息
根据userAgent获取浏览器/操作系统/设备类型等信息相关推荐
- JS获取浏览器类型和版本信息
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【PHP】获取浏览器HTTP请求header信息、获取服务器HTTP响应header信息
一.认识HTTP HTTP协议历史及设计思路(点击浏览) 二.获取浏览器HTTP请求header信息 1. Apach服务器下可以直接使用 PHP自带函数获取客户端HTTP请求头信息 /*作用:获取客 ...
- 【最全总结】java(user-agent)获取浏览器信息及操作系统
本文章使用java(user-agent),需要前端请求request 为了测试几乎下载完了windows常用浏览器 Android也几乎下载了全部常用浏览器作为测试, 苹果系统,ipone有朋帮测试 ...
- 【web开发】利用User-Agent获取浏览器类型
今晚学了User-Agent简称UA.通过这个请求头可以获取浏览器的类型. String userAgent = request.getHeader("User-Agent");S ...
- java 浏览器信息吗_java获取浏览器信息
String osName = System.getProperty("os.name"); //操作系统名称 String osArch = System.getProperty ...
- Javascript UserAgent 获取平台及浏览器信息
公司最近要做一套类似于百度统计的功能,于是收集整理了其中根据UserAgent获取客户端平台及浏览器信息的资料,不仅仅试用于Javascript,其他语言也可以参考相应正则进行改进.当然,肯定有不足的 ...
- 利用platform库获取浏览器和操作系统版本
原生方法检测 网站获取用户的浏览器和操作系统版本是一个很常见的需求,但是细说起来这个功能的实现并不简单.一般情况下有两种思路. 一是利用用户代理UserAgent来判断浏览器和OS的版本,因为各个平台 ...
- js 获取浏览器版本信息(全)
原文地址 js 获取浏览器版本信息(全) 觉得挺不错的,所以就收藏起来 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...
- java获取ua浏览器指纹_头条:如何获取浏览器指纹信息
❝ 本文收录于 GitHub 日问: DailyQuestion,内含大厂内推机会.面经大全及若干面试题,每天学习五分钟,一年进入大厂中. 大厂面经大全 大厂内推 ❞ 由于不同的系统显卡绘制 canv ...
最新文章
- xy苹果助手未受信任_手机畅销榜出炉:iPhone11销量第一,苹果是安卓无法逾越的大山...
- 怎么用Leangoo管理Bug
- 成本中心的费用计划/KP06
- pythonspark集群模式运行_有关python numpy pandas scipy 等 能在YARN集群上 运行PySpark
- Android中点击按钮获取string.xml中内容并弹窗提示
- [Android 插件化(一)] DynamicLoadApk的用法
- cubemx lan8720模块_通过STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现
- dataframe去重复 python_python – 在DataFrame中组合重复的列
- 【glibc源码分析】--strcpy.c 字符串复制
- 我是如何在自学编程9个月后找到工作的
- android 定时关机 app,定时关机X下载-定时关机X(强制关机)下载v1.1 安卓版-西西软件下载...
- 网站目标定位的关键词和选择质量高的关键词
- Java读写gif格式图片,解决ImageIO读取gif文件只读取第一帧的问题(read and write gif format pictures in Java)
- 火线零线接反等问题的分析(电工)
- 天啦噜,小白后台的一波新功能,看完世界杯 看这里!(最后有福利 哦~~)
- Python-10.1-面向对象
- 电脑上的计算机怎么移动硬盘,苹果笔记本移动硬盘如何使用_怎样在苹果电脑上用移动硬盘-win7之家...
- 彻底解决SPI协议OLED屏幕通道干扰乱码
- 需要知道的华为、锐捷、H3C交换机命令
- 网络:以太网类型(EthernetType)整理
热门文章
- 微信支付分 - 取消支付分API
- 十大宽带共享组网方式推荐
- 代数余子式之和怎么算_小明说养老 | 养老金怎么算之算算过渡性养老金
- Latex带序号的项目符号列表
- Flutter高仿微信-第57篇-添加好友
- python编程求1!+2!+…+n!_python计算阶乘和的方法(1!+2!+3!+...+n!)
- 直板android智能手机,小巧又精悍 3大系统直板全键盘手机搜罗
- 企业员工快速增长,无线网络如何承载需求?干货!
- 华为RH5885H V3服务器采集日志
- Android基础学习笔记14:安卓手势编程