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

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

pub package

一个用于Dio的Flutter curl命令生成器。

curl_logger_dio_interceptor log output

为什么?

有时你想要重放应用中发出的HTTP请求,或者想与你亲爱的后端开发人员共享。或者你只是喜欢CURL。

使用你的应用时,当遇到错误请求时,查看你的终端,复制并粘贴它,然后轻松地重新播放它!

特性

  • 简单的GET/POST/DELETE/PUT请求日志记录
  • 当数据可用时包含数据
  • 可直接在Postman中使用

入门指南

_dio = Dio();

_dio.interceptors.add(CurlLoggerDioInterceptor());

根据你的需求,你还可以传递 printOnSuccess: true 来打印所有请求而不是仅打印错误的请求。

默认情况下,convertFormDatatrue 并将 FormData 转换为普通的 Map,这样即使在使用 FormData(例如文件上传)时也可以获得CURL表示。

完整示例Demo

以下是一个完整的示例,展示了如何使用 curl_logger_dio_interceptor_modeck 插件:

import 'package:curl_logger_dio_interceptor_modeck/curl_logger_dio_interceptor_modeck.dart';
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(home: MyApp()));
}

class MyApp extends StatelessWidget {
  late final Dio _dio;

  MyApp({Key? key}) : super(key: key) {
    _dio = Dio();

    // 避免在生产环境中使用或自行承担风险!
    if (!kReleaseMode) {
      _dio.interceptors.add(CurlLoggerDioInterceptor(printOnSuccess: true));
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(
      child: Column(mainAxisAlignment: MainAxisAlignment.center, children: [
        ElevatedButton(
          onPressed: () {
            _dio.post('https://flutter.dev/some404',
                options: Options(headers: {'Auth': 'SOME-TOKEN'}));
          },
          child: const Text('Run POST errored request'),
        ),
        const SizedBox(height: 20),
        const Text(
          'After pressing the button, go in your terminal and copy the curl code. Paste it in your terminal. Tada ✨',
          textAlign: TextAlign.center,
        )
      ]),
    ));
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。点击该按钮会触发一个POST请求,并在控制台中输出对应的CURL命令。你可以复制该CURL命令并在终端中运行以重现请求。


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

1 回复

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


curl_logger_dio_interceptor 是一个用于 Flutter 的插件,它可以帮助你在使用 Dio 进行网络请求时,以类似 cURL 命令的格式打印请求日志。这对于调试和查看网络请求的详细信息非常有用。

使用步骤

1. 添加依赖

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

dependencies:
  dio: ^4.0.0
  curl_logger_dio_interceptor: ^0.0.1

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

2. 创建 Dio 实例并添加拦截器

在你的 Dart 代码中,创建一个 Dio 实例,并添加 CurlLoggerDioInterceptor 拦截器。

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

void main() async {
  // 创建 Dio 实例
  Dio dio = Dio();

  // 添加 CurlLoggerDioInterceptor 拦截器
  dio.interceptors.add(CurlLoggerDioInterceptor());

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

3. 运行代码

当你运行这段代码时,Dio 会在控制台打印出类似 cURL 命令的日志,方便你查看请求的详细信息。

输出示例

假设你发起了一个 GET 请求到 https://jsonplaceholder.typicode.com/posts/1,控制台会输出类似以下的内容:

curl -v -X GET "https://jsonplaceholder.typicode.com/posts/1" \
-H "accept: application/json" \
-H "content-type: application/json"

自定义日志级别

你可以通过设置 LogLevel 来调整日志的输出级别。LogLevel 有以下几种选项:

  • LogLevel.none: 不输出任何日志
  • LogLevel.basic: 输出基本日志(默认)
  • LogLevel.headers: 输出请求头信息
  • LogLevel.body: 输出请求体和响应体
dio.interceptors.add(CurlLoggerDioInterceptor(level: LogLevel.body));

其他功能

  • 请求体和响应体的格式化: 你可以通过设置 formatRequestBodyformatResponseBody 来格式化请求体和响应体的输出。
  • 自定义日志输出: 你可以通过设置 logger 来自定义日志的输出方式。
dio.interceptors.add(CurlLoggerDioInterceptor(
  level: LogLevel.body,
  formatRequestBody: true,
  formatResponseBody: true,
  logger: (String message) {
    print('Custom Logger: $message');
  },
));
回到顶部