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;
import java.util.List;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ReUtil;
import java.util.List;
import java.util.regex.Pattern;
/**
* 引擎对象
*
*
* @author looly
* @since 4.2.1
*/
public class Engine extends UserAgentInfo {
/** 未知 */
public static final Engine Unknown = new Engine(NameUnknown, null);
@ -32,7 +34,7 @@ public class Engine extends UserAgentInfo {
/**
* 构造
*
*
* @param name 引擎名称
* @param regex 关键字或表达式
*/
@ -40,4 +42,16 @@ public class Engine extends UserAgentInfo {
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;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import java.util.regex.Pattern;
/**
* User-Agent解析器
*
*
* @author looly
* @since 4.2.1
*/
@ -15,7 +12,7 @@ public class UserAgentParser {
/**
* 解析User-Agent
*
*
* @param userAgentString User-Agent字符串
* @return {@link UserAgent}
*/
@ -24,28 +21,34 @@ public class UserAgentParser {
return null;
}
final UserAgent userAgent = new UserAgent();
// 浏览器
final Browser browser = parseBrowser(userAgentString);
userAgent.setBrowser(parseBrowser(userAgentString));
userAgent.setVersion(browser.getVersion(userAgentString));
// 浏览器引擎
final Engine engine = parseEngine(userAgentString);
userAgent.setEngine(engine);
if (false == engine.isUnknown()) {
userAgent.setEngineVersion(parseEngineVersion(engine, userAgentString));
userAgent.setEngineVersion(engine.getVersion(userAgentString));
}
// 操作系统
userAgent.setOs(parseOS(userAgentString));
// 平台
final Platform platform = parsePlatform(userAgentString);
userAgent.setPlatform(platform);
userAgent.setMobile(platform.isMobile() || browser.isMobile());
return userAgent;
}
/**
* 解析浏览器类型
*
*
* @param userAgentString User-Agent字符串
* @return 浏览器类型
*/
@ -57,10 +60,10 @@ public class UserAgentParser {
}
return Browser.Unknown;
}
/**
* 解析引擎类型
*
*
* @param userAgentString User-Agent字符串
* @return 引擎类型
*/
@ -73,22 +76,9 @@ public class UserAgentParser {
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字符串
* @return 系统类型
*/
@ -103,7 +93,7 @@ public class UserAgentParser {
/**
* 解析平台类型
*
*
* @param userAgentString User-Agent字符串
* @return 平台类型
*/

View File

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