Flutter网络请求日志插件curl_logger_dio_interceptor的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter网络请求日志插件curl_logger_dio_interceptor的使用

curl_logger_dio_interceptor

curl_logger_dio_interceptor 是一个用于Flutter应用程序中生成CURL命令的日志记录器,它基于Dio库。这个插件可以帮助开发者轻松地在终端或者如Postman、Insomnia这样的工具中测试由Flutter应用程序发起的HTTP请求。

curl_logger_dio_interceptor log output

为什么使用?

有时候你可能希望重新播放应用中产生的HTTP请求,或者与后端开发人员共享这些请求。又或许你只是单纯喜欢CURL。无论哪种情况,这个插件都可以让你按照自己的意愿使用应用,当遇到有问题的请求时,只需查看终端,复制粘贴对应的CURL命令,就可以轻松地重新播放该请求了!

功能特性

  • 支持简单GET/POST/DELETE/PUT请求的日志记录
  • 在有数据的情况下记录请求体内容
  • 生成的CURL命令可以直接在Postman等工具中使用

入门指南

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

dependencies:
  dio: ^5.0.0 # 确保版本兼容
  curl_logger_dio_interceptor: ^latest_version # 替换为最新版本号

然后在Dart代码中初始化并配置插件:

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

void main() {
  final dio = Dio();

  // 添加拦截器,默认只打印错误请求
  dio.interceptors.add(CurlLoggerDioInterceptor());

  // 如果需要打印所有请求(包括成功的),可以设置参数printOnSuccess为true
  dio.interceptors.add(CurlLoggerDioInterceptor(printOnSuccess: true));

  runApp(MyApp(dio: dio));
}

class MyApp extends StatelessWidget {
  final Dio dio;

  MyApp({required this.dio});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('CURL Logger Demo')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              try {
                Response response = await dio.post(
                  'https://jsonplaceholder.typicode.com/posts',
                  data: {'title': 'foo', 'body': 'bar', 'userId': 1},
                  options: Options(headers: {'Authorization': 'Bearer YOUR_TOKEN'}),
                );
                print('Response status: ${response.statusCode}');
                print('Response data: ${response.data}');
              } catch (e) {
                print('Error occurred: $e');
              }
            },
            child: Text('Make a POST Request'),
          ),
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个简单的Flutter应用程序,其中包含一个按钮,点击按钮会触发一个POST请求到指定的API,并且由于我们添加了CurlLoggerDioInterceptor,所有的请求都会以CURL命令的形式被打印到控制台。你可以根据实际需求调整dio实例的配置,比如更改基础URL、设置默认超时时间等。

请注意,在生产环境中部署时,应当谨慎考虑是否开启此功能,因为这可能会导致敏感信息泄露。通常建议仅在调试阶段启用,并确保不会将任何敏感信息暴露给未经授权的人。


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用curl_logger_dio_interceptor插件来记录网络请求日志的代码示例。curl_logger_dio_interceptor是一个用于拦截和记录HTTP请求的Flutter插件,通常与dio库一起使用。

步骤1:添加依赖

首先,在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  dio: ^4.0.0 # 确保使用兼容版本的dio
  curl_logger_dio_interceptor: ^2.0.0 # 确保使用最新版本

步骤2:导入库并配置拦截器

然后,在你的Flutter项目中导入相关库并配置拦截器。以下是一个完整的示例,展示了如何在一个Flutter应用中使用这个插件来记录网络请求日志。

import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'package:curl_logger_dio_interceptor/curl_logger_dio_interceptor.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final Dio _dio = Dio();

  @override
  void initState() {
    super.initState();
    setupDio();
  }

  void setupDio() {
    // 创建CurlLoggerDioInterceptor实例
    final CurlLoggerDioInterceptor curlLogger = CurlLoggerDioInterceptor(
      responseBodyLimit: 1024, // 可选,设置响应体日志的最大长度
      requestHeaders: true,   // 可选,是否记录请求头
      responseHeaders: true,  // 可选,是否记录响应头
      logPrint: print,        // 可选,自定义日志打印函数,默认是print
    );

    // 将拦截器添加到dio实例
    _dio.interceptors.add(curlLogger);

    // 示例请求
    _dio.get('https://jsonplaceholder.typicode.com/posts/1')
      .then(response => {
        print('Response data: ${response.data}');
      })
      .catchError(error => {
        print('Error: ${error.message}');
      });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo'),
      ),
      body: Center(
        child: Text('Check your console for network request logs!'),
      ),
    );
  }
}

运行应用

  1. 运行flutter pub get来安装依赖。
  2. 运行你的Flutter应用,比如使用flutter run

查看日志

当网络请求发生时,你将在控制台(终端或命令行)中看到类似curl格式的请求和响应日志。这可以帮助你调试和分析网络请求。

注意事项

  • 确保diocurl_logger_dio_interceptor的版本是兼容的。
  • CurlLoggerDioInterceptor的构造函数中有多个可选参数,可以根据需要自定义日志记录行为。
  • logPrint参数允许你自定义日志打印函数,默认是print函数,你也可以将其替换为其他日志记录机制,比如发送到远程日志服务器。

希望这个示例对你有所帮助!

回到顶部