#user-agent #user #agent #browser #uap

uaparser-rs

简单的Rust用户代理解析器

1个不稳定版本

0.1.0 2024年4月17日

#283 in HTTP客户端

MIT 许可证

450KB
550

用户代理解析器

基于ua-parser/specification的简单用户代理解析器实现。

用法

use uaparser_rs::UAParser;

let uap = UAParser::from_yaml("./regexes.yaml").unwrap();
let ua_str = "Mozilla/5.0 (Linux; Android 4.0.1; Galaxy Nexus Build/ITL41F) AppleWebKit 537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31";

let client = uap.parse(ua_str);

/*
  client {
    user_agent: {
      family,
      major,
      minor,
      patch,
      patch_minor,
    },
    os: {
      family,
      major,
      minor,
      patch,
      patch_minor,
    },
    device: {
      family,
      brand,
      model,
    }
  }
*/

// User Agent
assert_eq!(client.user_agent.family, "Chrome Mobile");
assert_eq!(client.user_agent.major, Some(String::from("26")));
assert_eq!(client.user_agent.minor, Some(String::from("0")));
assert_eq!(client.user_agent.patch, Some(String::from("1410")));
assert_eq!(client.user_agent.patch_minor, Some(String::from("58")));

// Os
assert_eq!(client.os.family, "Android");
assert_eq!(client.os.major, Some(String::from("4")));
assert_eq!(client.os.minor, Some(String::from("0")));
assert_eq!(client.os.patch, Some(String::from("1")));

// Device
assert_eq!(client.device.family, "Samsung Galaxy Nexus");
assert_eq!(client.device.brand, Some(String::from("Samsung")));
assert_eq!(client.device.model, Some(String::from("Galaxy Nexus")));

依赖项

~4–6MB
~111K SLoC