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

Flutter中使用Dio包通过GET请求传递API账号密码问题求助

解决Dio发送带Basic Auth的GET请求失败问题

你遇到的问题核心在于Dio与http包的默认行为差异,以及不必要的手动JSON解析操作。以下是修复后的代码和问题分析:

修复后的代码

import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:test/paymentmodel.dart';

class ApiService {
  final Dio dio;
  ApiService(this.dio);

  Future<List<PaymentMethodModel>> getall() async {
    String username = '11191082';
    String password = 'dayfreetrial';
    
    // 构建Basic Auth请求头
    String basicAuth = 'Basic ${base64Encode(utf8.encode('$username:$password'))}';
    
    var response = await dio.get(
      'http://example-001-site1.atempurl.com/api/SalesInvoice/GetAllPayments',
      options: Options(
        headers: {
          HttpHeaders.authorizationHeader: basicAuth,
        },
      ),
    );

    // Dio已自动解析JSON,直接使用response.data
    List<dynamic> datat = response.data;
    List<PaymentMethodModel> storesList = [];
    for (int i = 0; i < datat.length; i++) {
      storesList.add(PaymentMethodModel.fromJson(datat[i]));
    }

    return storesList;
  }
}

关键问题解析

  1. 自动JSON解析差异
    http包返回的原始响应体需要手动调用jsonDecode解析,但Dio默认会根据响应的Content-Type自动解析JSON数据。你之前的代码中对response.data再次调用jsonDecode,会导致类型错误(因为response.data已经是解析后的List),这是请求失败的主要原因。

  2. 规范请求头设置
    使用HttpHeaders.authorizationHeader常量替代手动拼写'Authorization',可以避免拼写错误,同时符合Dart的编码规范。

  3. 额外排查技巧
    如果问题仍存在,可以添加日志拦截器查看实际发送的请求和响应详情,帮助定位问题:

    // 在创建Dio实例时添加日志拦截器
    final dio = Dio()..interceptors.add(LogInterceptor(requestBody: true, responseBody: true));
    

更简洁的全局Auth配置

如果你的多个请求都需要Basic Auth,可以在Dio实例初始化时统一配置拦截器,避免重复代码:

final dio = Dio()
  ..interceptors.add(InterceptorsWrapper(
    onRequest: (options, handler) {
      String username = '11191082';
      String password = 'dayfreetrial';
      options.headers[HttpHeaders.authorizationHeader] = 'Basic ${base64Encode(utf8.encode('$username:$password'))}';
      handler.next(options);
    },
  ));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:58:12