This commit is contained in:
Looly 2021-07-05 10:47:23 +08:00
parent 29c2db6246
commit 31398c727f
3 changed files with 38 additions and 34 deletions

View File

@ -1,17 +1,19 @@
package cn.hutool.http.useragent; package cn.hutool.http.useragent;
import java.util.List;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ReUtil;
import java.util.List;
import java.util.regex.Pattern;
/** /**
* 引擎对象 * 引擎对象
* *
* @author looly * @author looly
* @since 4.2.1 * @since 4.2.1
*/ */
public class Engine extends UserAgentInfo { public class Engine extends UserAgentInfo {
/** 未知 */ /** 未知 */
public static final Engine Unknown = new Engine(NameUnknown, null); public static final Engine Unknown = new Engine(NameUnknown, null);
@ -32,7 +34,7 @@ public class Engine extends UserAgentInfo {
/** /**
* 构造 * 构造
* *
* @param name 引擎名称 * @param name 引擎名称
* @param regex 关键字或表达式 * @param regex 关键字或表达式
*/ */
@ -40,4 +42,16 @@ public class Engine extends UserAgentInfo {
super(name, regex); super(name, regex);
} }
/**
* 获取引擎版本
*
* @param userAgentString User-Agent字符串
* @return 版本
* @since 5.7.4
*/
public String getVersion(String userAgentString) {
final String regexp = getName() + "[/\\- ]([\\d\\w.\\-]+)";
final Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
return ReUtil.getGroup1(pattern, userAgentString);
}
} }

View File

@ -1,13 +1,10 @@
package cn.hutool.http.useragent; package cn.hutool.http.useragent;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import java.util.regex.Pattern;
/** /**
* User-Agent解析器 * User-Agent解析器
* *
* @author looly * @author looly
* @since 4.2.1 * @since 4.2.1
*/ */
@ -15,7 +12,7 @@ public class UserAgentParser {
/** /**
* 解析User-Agent * 解析User-Agent
* *
* @param userAgentString User-Agent字符串 * @param userAgentString User-Agent字符串
* @return {@link UserAgent} * @return {@link UserAgent}
*/ */
@ -24,28 +21,34 @@ public class UserAgentParser {
return null; return null;
} }
final UserAgent userAgent = new UserAgent(); final UserAgent userAgent = new UserAgent();
// 浏览器
final Browser browser = parseBrowser(userAgentString); final Browser browser = parseBrowser(userAgentString);
userAgent.setBrowser(parseBrowser(userAgentString)); userAgent.setBrowser(parseBrowser(userAgentString));
userAgent.setVersion(browser.getVersion(userAgentString)); userAgent.setVersion(browser.getVersion(userAgentString));
// 浏览器引擎
final Engine engine = parseEngine(userAgentString); final Engine engine = parseEngine(userAgentString);
userAgent.setEngine(engine); userAgent.setEngine(engine);
if (false == engine.isUnknown()) { if (false == engine.isUnknown()) {
userAgent.setEngineVersion(parseEngineVersion(engine, userAgentString)); userAgent.setEngineVersion(engine.getVersion(userAgentString));
} }
// 操作系统
userAgent.setOs(parseOS(userAgentString)); userAgent.setOs(parseOS(userAgentString));
// 平台
final Platform platform = parsePlatform(userAgentString); final Platform platform = parsePlatform(userAgentString);
userAgent.setPlatform(platform); userAgent.setPlatform(platform);
userAgent.setMobile(platform.isMobile() || browser.isMobile()); userAgent.setMobile(platform.isMobile() || browser.isMobile());
return userAgent; return userAgent;
} }
/** /**
* 解析浏览器类型 * 解析浏览器类型
* *
* @param userAgentString User-Agent字符串 * @param userAgentString User-Agent字符串
* @return 浏览器类型 * @return 浏览器类型
*/ */
@ -57,10 +60,10 @@ public class UserAgentParser {
} }
return Browser.Unknown; return Browser.Unknown;
} }
/** /**
* 解析引擎类型 * 解析引擎类型
* *
* @param userAgentString User-Agent字符串 * @param userAgentString User-Agent字符串
* @return 引擎类型 * @return 引擎类型
*/ */
@ -73,22 +76,9 @@ public class UserAgentParser {
return Engine.Unknown; return Engine.Unknown;
} }
/**
* 解析引擎版本
*
* @param engine 引擎
* @param userAgentString User-Agent字符串
* @return 引擎版本
*/
private static String parseEngineVersion(Engine engine, String userAgentString) {
final String regexp = engine.getName() + "[/\\- ]([\\d\\w.\\-]+)";
final Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
return ReUtil.getGroup1(pattern, userAgentString);
}
/** /**
* 解析系统类型 * 解析系统类型
* *
* @param userAgentString User-Agent字符串 * @param userAgentString User-Agent字符串
* @return 系统类型 * @return 系统类型
*/ */
@ -103,7 +93,7 @@ public class UserAgentParser {
/** /**
* 解析平台类型 * 解析平台类型
* *
* @param userAgentString User-Agent字符串 * @param userAgentString User-Agent字符串
* @return 平台类型 * @return 平台类型
*/ */

View File

@ -2,7 +2,7 @@ package cn.hutool.http.useragent;
/** /**
* User-Agent工具类 * User-Agent工具类
* *
* @author looly * @author looly
* *
*/ */
@ -10,7 +10,7 @@ public class UserAgentUtil {
/** /**
* 解析User-Agent * 解析User-Agent
* *
* @param userAgentString User-Agent字符串 * @param userAgentString User-Agent字符串
* @return {@link UserAgent} * @return {@link UserAgent}
*/ */