Flutter网络请求日志拦截插件dio_curl_logger_interceptor的使用

Flutter网络请求日志拦截插件dio_curl_logger_interceptor的使用

本文档介绍了如何在Flutter项目中使用dio_curl_logger_interceptor插件来调试API请求。该插件基于dio网络库,可以帮助开发者记录和打印网络请求的日志。


功能

  • 支持多种HTTP请求类型(如GET、POST、DELETE、PUT、OPTIONS等)。
  • 支持多种请求体类型(如表单数据、URL编码、JSON、纯文本等)。
  • 日志格式与Postman兼容。

开始使用

首先,确保你已经安装了diodio_curl_logger_interceptor依赖项。如果你还没有添加这些依赖,请在项目的pubspec.yaml文件中添加以下内容:

dependencies:
  dio: ^4.0.0
  dio_curl_logger_interceptor: ^1.0.0

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

接下来,将DioCurlLoggerInterceptor附加到Dio实例上。注意,日志拦截器应放置在其他拦截器之后,以便记录所有已添加的头部和字段。

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

void main() async {
  // 初始化Dio实例
  final dio = Dio();

  // 添加DioCurlLoggerInterceptor
  dio.interceptors.add(DioCurlLoggerInterceptor());

  // 发送网络请求
  try {
    final response = await dio.get('https://jsonplaceholder.typicode.com/posts/1');
    print('Response Data: ${response.data}');
  } catch (e) {
    print('Error: $e');
  }
}

使用方法

除了默认配置外,你还可以根据需求进行自定义。例如:

自定义日志打印方式

默认情况下,日志会通过dart:developer模块的log函数打印。你可以更改打印逻辑,例如将日志写入文件。

import 'package:path_provider/path_provider.dart';
import 'package:dio/dio.dart';
import 'package:dio_curl_logger_interceptor/dio_curl_logger_interceptor.dart';

void main() async {
  // 初始化Dio实例
  final dio = Dio();

  // 获取应用文档目录并创建日志文件
  final directory = await getApplicationDocumentsDirectory();
  final file = File('${directory.path}/app_log.txt');

  // 添加自定义日志拦截器
  dio.interceptors.add(DioCurlLoggerInterceptor(
    onPrint: (final cURL) async {
      print('cURL is: $cURL'); // 打印日志到控制台
      await file.writeAsString('$cURL\n', mode: FileMode.append); // 将日志追加到文件
    },
  ));

  // 发送网络请求
  try {
    final response = await dio.get('https://jsonplaceholder.typicode.com/posts/1');
    print('Response Data: ${response.data}');
  } catch (e) {
    print('Error: $e');
  }
}

控制日志打印时机

默认情况下,日志会在发送请求之前打印。你也可以选择在响应返回时打印日志(无论成功还是失败)。

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

void main() async {
  // 初始化Dio实例
  final dio = Dio();

  // 在请求前打印日志
  dio.interceptors.add(DioCurlLoggerInterceptor(sendOnRequest: true));

  // 在响应后打印日志
  dio.interceptors.add(DioCurlLoggerInterceptor(sendOnRequest: false));

  // 发送网络请求
  try {
    final response = await dio.get('https://jsonplaceholder.typicode.com/posts/1');
    print('Response Data: ${response.data}');
  } catch (e) {
    print('Error: $e');
  }
}

贡献

欢迎所有贡献!如果你喜欢这个项目,请点击星星支持。如果你想提交更多功能或修复问题,请提交Pull Request或报告Issue。


完整示例

以下是一个完整的示例,展示了如何使用dio_curl_logger_interceptor插件记录网络请求日志。

import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'package:dio_curl_logger_interceptor/dio_curl_logger_interceptor.dart';
import 'package:path_provider/path_provider.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('dio_curl_logger_interceptor 示例')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 初始化Dio实例
              final dio = Dio();

              // 获取应用文档目录并创建日志文件
              final directory = await getApplicationDocumentsDirectory();
              final file = File('${directory.path}/app_log.txt');

              // 添加自定义日志拦截器
              dio.interceptors.add(DioCurlLoggerInterceptor(
                onPrint: (final cURL) async {
                  print('cURL is: $cURL'); // 打印日志到控制台
                  await file.writeAsString('$cURL\n', mode: FileMode.append); // 将日志追加到文件
                },
              ));

              // 发送网络请求
              try {
                final response = await dio.get('https://jsonplaceholder.typicode.com/posts/1');
                print('Response Data: ${response.data}');
              } catch (e) {
                print('Error: $e');
              }
            },
            child: Text('测试网络请求'),
          ),
        ),
      ),
    );
  }
}
1 回复

更多关于Flutter网络请求日志拦截插件dio_curl_logger_interceptor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dio_curl_logger_interceptor 是一个用于 Flutter 的 Dio 网络请求库的拦截器插件,它可以将网络请求转换为 cURL 命令,并将其打印到日志中。这对于调试和查看网络请求的详细信息非常有用。

安装

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

dependencies:
  dio: ^4.0.0
  dio_curl_logger_interceptor: ^1.0.0

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

使用

  1. 导入库

    在你的 Dart 文件中导入 diodio_curl_logger_interceptor

    import 'package:dio/dio.dart';
    import 'package:dio_curl_logger_interceptor/dio_curl_logger_interceptor.dart';
  2. 创建 Dio 实例并添加拦截器

    创建一个 Dio 实例,并将 DioCurlLoggerInterceptor 添加到拦截器列表中:

    void main() {
      Dio dio = Dio();
      dio.interceptors.add(DioCurlLoggerInterceptor());
      
      // 发送一个示例请求
      fetchData(dio);
    }
    
    Future<void> fetchData(Dio dio) async {
      try {
        Response response = await dio.get('https://jsonplaceholder.typicode.com/posts');
        print(response.data);
      } catch (e) {
        print(e);
      }
    }
  3. 查看日志

    当你运行上面的代码并发送网络请求时,DioCurlLoggerInterceptor 会将请求转换为 cURL 命令并打印到控制台。例如:

    curl -X GET 'https://jsonplaceholder.typicode.com/posts' \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json'

自定义配置

DioCurlLoggerInterceptor 提供了一些可选参数,允许你自定义日志输出的行为:

  • logRequestHeaders: 是否打印请求头,默认为 true
  • logRequestBody: 是否打印请求体,默认为 true
  • logResponseHeaders: 是否打印响应头,默认为 false
  • logResponseBody: 是否打印响应体,默认为 false

你可以通过传递这些参数来配置拦截器:

dio.interceptors.add(DioCurlLoggerInterceptor(
  logRequestHeaders: true,
  logRequestBody: true,
  logResponseHeaders: false,
  logResponseBody: false,
));
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!