dio_curl_interceptor 1.1.4  dio_curl_interceptor: ^1.1.4 copied to clipboard
dio_curl_interceptor: ^1.1.4 copied to clipboard
A Flutter package for logging curl with dio interceptor with Ansi escape codes makes it easy to debug.
dio_curl_interceptor #
A Flutter package that provides a Dio interceptor for logging HTTP requests as cURL commands. This makes it easier to debug API calls and share them with others.

Features #
- π Automatically converts Dio HTTP requests to cURL commands
- π Logs cURL commands to the console with custom styles and printer
- βοΈ Configurable options for logging behavior
- π Support for FormData conversion
- π§° Standalone utility methods for custom interceptors
- π οΈ Direct utility functions without requiring the full interceptor
Getting started #
Add dio_curl_interceptor to your pubspec.yaml file:
dependencies:
  dio_curl_interceptor: any
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
    colored: true, // Enable/disable colored output in console
    onRequest: RequestDetails(visible: true),
    onResponse: ResponseDetails(visible: true, responseBody: true),
    onError: ErrorDetails(visible: true, responseBody: true),
    // Format response body with built-in formatters
    formatter: CurlFormatters.escapeNewlinesString,
  ),
  // 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.