Flutter用户代理管理插件ua_client_helper的使用

插件简介

此插件提供了对用户代理(User-Agent)信息的管理和获取功能。通过该插件,您可以轻松获取设备的详细信息,并将其用于网络请求或日志记录等场景。

插件特性

  • Null安全:完全支持Flutter的null安全性。
  • 多平台支持:适用于Android和iOS设备。
  • 丰富的API:提供多种方式获取用户代理信息。

安装

在您的pubspec.yaml文件中添加以下依赖:

dependencies:
  ua_client_hints: ^1.x.x

然后运行以下命令安装依赖:

$ flutter pub get

使用方法

示例代码

以下是一个完整的示例代码,展示如何使用ua_client_helper插件来获取用户代理信息并显示在界面上。

示例代码:lib/main.dart

import 'package:flutter/material.dart';
import 'package:ua_client_hints/ua_client_helper.dart';

void main() async {
  // 初始化Flutter绑定
  WidgetsFlutterBinding.ensureInitialized();

  // 获取用户代理信息
  final ua = await userAgent();
  final uaData = await userAgentData();
  final header = await userAgentClientHintsHeader();

  runApp(MyApp(
    userAgent: ua,
    userAgentData: uaData,
    userAgentHeader: header,
  ));
}

class MyApp extends StatelessWidget {
  final String userAgent;
  final UserAgentData userAgentData;
  final Map<String, dynamic> userAgentHeader;

  const MyApp({
    required this.userAgent,
    required this.userAgentData,
    required this.userAgentHeader,
  });

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text("User-Agent Client Hints"),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
            // 用户代理信息
            const Text(
              "## User-Agent ##",
              style: TextStyle(fontWeight: FontWeight.bold),
            ),
            Text("User-Agent: $userAgent"),

            // 用户代理数据
            const Text(
              "## User-Agent Client Hints ##",
              style: TextStyle(fontWeight: FontWeight.bold),
            ),
            Text("platform: ${userAgentData.platform}"),
            Text("platformVersion: ${userAgentData.platformVersion}"),
            Text("architecture: ${userAgentData.architecture}"),
            Text("model: ${userAgentData.model}"),
            Text("brand: ${userAgentData.brand}"),
            Text("mobile: ${userAgentData.mobile}"),
            Text("device: ${userAgentData.device}"),
            Text("appName: ${userAgentData.package.appName}"),
            Text("appVersion: ${userAgentData.package.appVersion}"),
            Text("packageName: ${userAgentData.package.packageName}"),
            Text("buildNumber: ${userAgentData.package.buildNumber}"),

            // 用户代理头部信息
            const Text(
              "## User-Agent Client Hints Headers ##",
              style: TextStyle(fontWeight: FontWeight.bold),
            ),
            Text("User-Agent: ${userAgentHeader['User-Agent']}"),
            Text("Sec-CH-UA-Arch: ${userAgentHeader['Sec-CH-UA-Arch']}"),
            Text("Sec-CH-UA-Model: ${userAgentHeader['Sec-CH-UA-Model']}"),
            Text("Sec-CH-UA-Platform: ${userAgentHeader['Sec-CH-UA-Platform']}"),
            Text("Sec-CH-UA-Platform-Version: ${userAgentHeader['Sec-CH-UA-Platform-Version']}"),
            Text("Sec-CH-UA: ${userAgentHeader['Sec-CH-UA']}"),
            Text("Sec-CH-UA-Full-Version: ${userAgentHeader['Sec-CH-UA-Full-Version']}"),
            Text("Sec-CH-UA-Mobile: ${userAgentHeader['Sec-CH-UA-Mobile']}"),
          ],
        ),
      );
    }
  }
}

API说明

获取用户代理字符串

final String ua = await userAgent();
print('User-Agent: $ua');  // e.g.. 'SampleApp/1.0.0 (Android 11; Pixel 4 XL; coral; arm64-v8a)'

获取用户代理数据对象

final UserAgentData uaData = await userAgentData();

print('platform:        ${uaData.platform}');              // e.g.. 'Android'
print('platformVersion: ${uaData.platformVersion}');       // e.g.. '10'
print('model:           ${uaData.model}');                 // e.g.. 'Pixel 4 XL'
print('architecture:    ${uaData.architecture}');          // e.g.. 'arm64-v8a'
print('brand:           ${uaData.brand}');                 // e.g.. 'google'
print('mobile:          ${uaData.mobile}');                // e.g.. true
print('device:          ${uaData.device}');                // e.g.. 'coral'
print('appName:         ${uaData.package.appName}');       // e.g.. 'SampleApp'
print('appVersion:      ${uaData.package.appVersion}');    // e.g.. '1.0.0'
print('packageName:     ${uaData.package.packageName}');   // e.g.. 'jp.wasabeef.ua'
print('buildNumber:     ${uaData.package.buildNumber}');   // e.g.. '1'

获取用户代理头部信息

final Map<String, dynamic> header = await userAgentClientHintsHeader();

print("Sec-CH-UA-Arch:             ${header['Sec-CH-UA-Arch']}");             // e.g.. 'arm64-v8a'
print("Sec-CH-UA-Model:            ${header['Sec-CH-UA-Model']}");            // e.g.. 'Pixel 4 XL'
print("Sec-CH-UA-Platform:         ${header['Sec-CH-UA-Platform']}");         // e.g.. 'Android'
print("Sec-CH-UA-Platform-Version: ${header['Sec-CH-UA-Platform-Version']}"); // e.g.. '10'
print("Sec-CH-UA:                  ${header['Sec-CH-UA']}");                  // e.g.. '"SampleApp"; v="1.0.0"'
print("Sec-CH-UA-Full-Version:     ${header['Sec-CH-UA-Full-Version']}");     // e.g.. '1.0.0'
print("Sec-CH-UA-Mobile:           ${header['Sec-CH-UA-Mobile']}");           // e.g.. '?1' (true) or '?0' (false)

更多关于Flutter用户代理管理插件ua_client_helper的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter用户代理管理插件ua_client_helper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


ua_client_helper 是一个用于管理 Flutter 应用中用户代理(User Agent)的插件。它允许你轻松地设置和获取 HTTP 请求中的用户代理字符串。这对于需要模拟特定浏览器或设备行为的应用场景非常有用。

安装

首先,你需要在 pubspec.yaml 文件中添加 ua_client_helper 依赖:

dependencies:
  flutter:
    sdk: flutter
  ua_client_helper: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

基本用法

1. 设置用户代理

你可以使用 UAClientHelper 来设置全局的用户代理字符串。这个设置将应用于所有通过 httpdio 等库发起的 HTTP 请求。

import 'package:ua_client_helper/ua_client_helper.dart';

void setUserAgent() async {
  await UAClientHelper.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');
}

2. 获取用户代理

你可以通过 UAClientHelper 获取当前设置的用户代理字符串。

import 'package:ua_client_helper/ua_client_helper.dart';

void getUserAgent() async {
  String userAgent = await UAClientHelper.getUserAgent();
  print('Current User Agent: $userAgent');
}

3. 使用自定义的 HTTP 客户端

ua_client_helper 提供了一个 UAClient 类,你可以将其用作自定义的 HTTP 客户端。这个客户端会自动应用你设置的用户代理。

import 'package:ua_client_helper/ua_client_helper.dart';
import 'package:http/http.dart' as http;

void fetchData() async {
  // 设置用户代理
  await UAClientHelper.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');

  // 使用 UAClient 发起请求
  var client = UAClient();
  var response = await client.get(Uri.parse('https://example.com'));

  print('Response status: ${response.statusCode}');
  print('Response body: ${response.body}');
}

高级用法

1. 动态设置用户代理

你可以在每次请求时动态设置用户代理,而不是全局设置。

import 'package:ua_client_helper/ua_client_helper.dart';
import 'package:http/http.dart' as http;

void fetchDataWithDynamicUA() async {
  var client = UAClient();
  
  // 动态设置用户代理
  client.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15');

  var response = await client.get(Uri.parse('https://example.com'));

  print('Response status: ${response.statusCode}');
  print('Response body: ${response.body}');
}

2. 使用 Dio 插件

如果你使用的是 dio 作为 HTTP 客户端,你可以通过 UAClientHelper 来设置用户代理。

import 'package:dio/dio.dart';
import 'package:ua_client_helper/ua_client_helper.dart';

void fetchDataWithDio() async {
  // 设置用户代理
  await UAClientHelper.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');

  var dio = Dio();
  var response = await dio.get('https://example.com');

  print('Response status: ${response.statusCode}');
  print('Response data: ${response.data}');
}
回到顶部