首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 解析 HTTP User-Agent 實戰:基於 uasparser 庫識別瀏覽器、操作系統與設備

     編輯:Java 綜合教學

Java 解析 HTTP User-Agent 實戰:基於 uasparser 庫識別瀏覽器、操作系統與設備

依賴準備

<dependency>
  <groupId>cz.mallat</groupId>
  <artifactId>uasparser</artifactId>
  <version>0.6.1</version>
</dependency>
<dependency>
  <groupId>com.googlecode.jregex</groupId>
  <artifactId>jregex</artifactId>
  <version>1.2_01</version>
</dependency>

工具類實現

import cz.mallat.uasparser.OnlineUpdater;
import cz.mallat.uasparser.UASparser;
import cz.mallat.uasparser.UserAgentInfo;

public class UserAgentUtil {
    private static UASparser uasParser;

    static {
        try {
            uasParser = new UASparser(OnlineUpdater.getVendoredInputStream());
        } catch (IOException e) {
            throw new RuntimeException("User-Agent 解析器初始化失敗", e);
        }
    }

    public static UserAgentInfo parse(String userAgent) {
        try {
            return uasParser.parse(userAgent);
        } catch (IOException e) {
            throw new RuntimeException("解析失敗: " + userAgent, e);
        }
    }

    // 主方法演示
    public static void main(String[] args) {
        String ua = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36";
        UserAgentInfo info = parse(ua);
        System.out.println("操作系統家族: " + info.getOsFamily());
        System.out.println("操作系統: " + info.getOsName());
        System.out.println("瀏覽器家族: " + info.getUaFamily());
        System.out.println("瀏覽器版本: " + info.getBrowserVersionInfo());
        System.out.println("設備類型: " + info.getDeviceType());
        System.out.println("瀏覽器名稱: " + info.getUaName());
        System.out.println("類型: " + info.getType());
    }
}

運行結果示例

操作系統家族: Windows
操作系統: Windows 7
瀏覽器家族: Chrome
瀏覽器版本: 44.0.2403.130
設備類型: Computer
瀏覽器名稱: Chrome
類型: Browser

控制台輸出

獲取 User-Agent 字符串

Chrome 開發者工具 → Network → 請求頭 → User-Agent。

Chrome 查看 UA

靜態塊初始化時機補充

類初始化觸發條件(JLS §12.4.1):

  1. 創建實例(new、反射、反序列化)
  2. 調用靜態方法
  3. 訪問靜態字段(非常量)
  4. 反射調用 Class.forName 等
  5. 初始化子類(先初始化父類)
  6. JVM 啟動主類(含 main 方法)

生產環境建議

  • 緩存解析結果(如 Guava Cache),避免重複解析同一 UA 字符串。
  • 定期更新 regexes.yaml(uasparser 內置),支援最新瀏覽器/設備。
  • 異常情況下返回默認信息,不拋出異常影響主流程。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved