You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何使用Dio通过Basic Auth发起POST请求获取Token

Flutter 基于Dio实现带Basic Auth的POST请求获取Token方案

实现步骤

  • 第一步:引入Dio依赖
    在项目pubspec.yaml的dependencies节点下添加依赖:
dependencies:
  flutter:
    sdk: flutter
  dio: ^5.4.0 # 可替换为最新稳定版

保存后执行命令flutter pub get完成依赖安装。

  • 第二步:编写请求逻辑
    Basic Auth的核心是在请求头中携带格式为Authorization: Basic base64(用户名:密码)的认证字段,单次请求携带认证信息可直接参考如下代码:
// 必须导入的依赖
import 'package:dio/dio.dart';
import 'dart:convert';

// 建议全局维护Dio单例,避免重复创建实例
final Dio dio = Dio(BaseOptions(
  baseUrl: "https://你的接口域名",
  connectTimeout: const Duration(seconds: 10),
  receiveTimeout: const Duration(seconds: 10),
  // 如果接口要求表单提交,可放开下面这行配置
  // contentType: Headers.formUrlEncodedContentType,
));

/// 调用认证接口获取Token
/// [username] Basic认证用户名
/// [password] Basic认证密码
Future<String?> getRequestToken(String username, String password) async {
  try {
    // 拼接Basic认证头
    final basicAuthHeader = "Basic ${base64Encode(utf8.encode('$username:$password'))}";
    
    final response = await dio.post(
      "/你的Token接口路径",
      options: Options(
        headers: {
          "Authorization": basicAuthHeader,
        },
      ),
      // 接口要求的其他POST参数,根据实际文档补充
      data: {
        // 例:"grant_type": "client_credentials"
      },
    );

    // 按接口返回结构解析Token,对应实际响应格式取对应字段即可
    if (response.statusCode == 200 && response.data is Map) {
      // 字段名根据实际返回调整,常见字段名有token、access_token
      return response.data["token"]?.toString();
    }
  } on DioException catch (e) {
    // 错误捕获
    print("接口请求异常: ${e.message}");
    if (e.response != null) {
      print("响应状态码: ${e.response?.statusCode}, 响应内容: ${e.response?.data}");
    }
  }
  return null;
}

可选优化:全局配置Basic Auth

如果项目中多个接口都需要携带Basic Auth,不需要每个请求都单独加请求头,通过Dio拦截器统一注入即可:

// 在Dio实例初始化后添加拦截器
dio.interceptors.add(InterceptorsWrapper(
  onRequest: (options, handler) async {
    const username = "你的统一认证账号";
    const password = "你的统一认证密钥";
    options.headers["Authorization"] = "Basic ${base64Encode(utf8.encode('$username:$password'))}";
    // 继续发起请求
    handler.next(options);
  },
));

常见踩坑说明

  • 拼接认证字段时,用户名和密码中间的冒号不能省略,不要加多余空格,否则会导致401未授权错误
  • 如果接口返回格式不是JSON,记得在Options中设置对应的responseType
  • 获取到的Token建议通过shared_preferences等本地存储方案持久化,后续需要Token鉴权的接口,在请求头携带Authorization: Bearer 你的Token值即可

内容的提问来源于stack exchange,提问作者SaDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:25:17