dio_curl_interceptor 2.1.0 copy "dio_curl_interceptor: ^2.1.0" to clipboard
dio_curl_interceptor: ^2.1.0 copied to clipboard

A Flutter package for debugging and sharing. Easily reuse the commands in Postman, Terminal, or any cURL-compatible tool.

dio_curl_interceptor #

pub package

A Flutter package with a Dio interceptor that logs HTTP requests as cURL commands β€” perfect for debugging and sharing. Easily reuse the commands in Postman, Terminal, or any cURL-compatible tool.

Screenshot

Features #

  • πŸ” Converts Dio HTTP requests to cURL commands, easily shareable for debugging or tools like Postman.
  • πŸ“ Logs cURL commands with configurable styles and custom printer.
  • 🧰 Provides standalone utility methods for custom interceptors and direct use.

Upcoming Features #

  • πŸ’ΎπŸ“Š Cached cURL commands and a dedicated Flutter widget for reviewing logs.

This package is actively maintained with ❀️ and updated regularly with improvements, bug fixes, and new features

Terminal Compatibility #

Below is a compatibility table for different terminals and their support for printing and ANSI colors:

Terminal/Console print/debugPrint log (dart:developer) ANSI Colors Support
VS Code Debug Console βœ… βœ… βœ…
Android Studio Logcat -- -- --
Android Studio Debug Tab -- -- --
IntelliJ IDEA Console -- -- --
Flutter DevTools Console -- -- --
Terminal/CMD -- -- --
PowerShell -- -- --
Xcode Console -- -- --

Getting started #

Add dio_curl_interceptor to your pubspec.yaml file:

dependencies:
  dio_curl_interceptor: ^2.1.0

Then run:

flutter pub get

Usage #

Import the package #

import 'package:dio_curl_interceptor/dio_curl_interceptor.dart';

Option 1: Using the CurlInterceptor #

Add the interceptor to your Dio instance:

final dio = Dio();
dio.interceptors.add(CurlInterceptor());

You can customize the interceptor behavior with CurlOptions:

dio.interceptors.add(CurlInterceptor(
  curlOptions: CurlOptions(
    status: true, // Show status codes in logs
    responseTime: true, // Show response timing
    convertFormData: true, // Convert FormData to JSON in cURL output
    onRequest: RequestDetails(visible: true),
    onResponse: ResponseDetails(visible: true, responseBody: true),
    onError: ErrorDetails(visible: true, responseBody: true),
    // Configure pretty printing options
    prettyConfig: PrettyConfig(
      blockEnabled: true, // Enable pretty printing
      colorEnabled: true, // Enable/disable colored output
      emojiEnabled: true, // Enable/disable emoji output
      lineLength: 100, // Set the length of separator lines
    ),
    // Custom printer function to override default logging behavior
    printer: (String text) {
      // Your custom logging implementation
      print('Custom log: $text');
    },
  ),
));

Option 2: Using CurlUtils directly in your own interceptor #

If you prefer to use the utility methods in your own custom interceptor, you can use CurlUtils directly:

class YourInterceptor extends Interceptor {
  @override
  void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
    // Your request handling logic here (additional headers, auth, etc.)

    // Generate and log curl command
    CurlUtils.logCurl(options);

    // Add timing header if you want to track response time
    CurlUtils.addXClientTime(options);

    handler.next(options);
  }

  @override
  void onResponse(Response response, ResponseInterceptorHandler handler) {
    // Handle and log response
    CurlUtils.handleOnResponse(response);

    handler.next(response);
  }

  @override
  void onError(DioException err, ErrorInterceptorHandler handler) {
    // Handle and log error
    CurlUtils.handleOnError(err);

    handler.next(err);
  }
}

Option 3: Using utility functions directly #

If you don't want to add a full interceptor, you can use the utility functions directly in your code:

// Generate a curl command from request options
final dio = Dio();
final response = await dio.get('https://example.com');

// Generate and log a curl command
CurlUtils.logCurl(response.requestOptions);

// Log response details
CurlUtils.handleOnResponse(response);

// Log error details
try {
  await dio.get('https://invalid-url.com');
} on DioException catch (e) {
  CurlUtils.handleOnError(e);
}

Option 4: Retrieve the curl #

If you want to retrieve the curl command from a response, you can use the genCurl public function:

final curl = genCurl(requestOptions);

// now you can save to file, share, etc...

License #

This project is licensed under the MIT License - see the LICENSE file for details.

  • Repository: GitHub
  • Bug Reports: Please file issues on the GitHub repository
  • Feature Requests: Feel free to suggest new features through GitHub issues

Contributions are welcome! Please feel free to submit a Pull Request.

2
likes
0
points
1.26k
downloads

Publisher

verified publishervenhdev.me

Weekly Downloads

A Flutter package for debugging and sharing. Easily reuse the commands in Postman, Terminal, or any cURL-compatible tool.

Homepage
Repository (GitHub)
View/report issues

Topics

#curl #dio #http #logging #console

License

unknown (license)

Dependencies

codekit, colored_logger, dio, flutter

More

Packages that depend on dio_curl_interceptor