toCurl function

String toCurl(
  1. Request req, {
  2. Platform platform = Platform.POSIX,
})

Implementation

String toCurl(Request req, {Platform platform = Platform.POSIX}) {
  var command = ['curl'];
  var ignoredHeaders = ['host', 'method', 'path', 'scheme', 'version'];
  final escapeString =
      platform == Platform.WIN ? _escapeStringWindows : _escapeStringPosix;
  var requestMethod = 'GET';
  var data = <String>[];
  final requestHeaders = req.headers;
  final requestBody = req.body;
  final contentType = requestHeaders['content-type'];

  command.add(escapeString('${req.url.origin}${req.url.path}')
      .replaceAllMapped(_r10, (match) => '\\${match.group(0)}'));
  if (contentType != null && contentType.indexOf(_urlencoded) == 0) {
    ignoredHeaders.add('content-length');
    requestMethod = 'POST';
    data.add('--data');
    data.add(escapeString(req.bodyFields.keys
        .map((key) =>
            '${Uri.encodeComponent(key)}=${Uri.encodeComponent(req.bodyFields[key]!)}')
        .join('&')));
  } else if (requestBody.isNotEmpty) {
    ignoredHeaders.add('content-length');
    requestMethod = 'POST';
    data.add('--data-binary');
    data.add(escapeString(requestBody));
  }

  if (req.method != requestMethod) {
    command..add('-X')..add(req.method);
  }
  Map<String, String?>.fromIterable(
      requestHeaders.keys.where((k) => !ignoredHeaders.contains(k)),
      value: (k) => requestHeaders[k]).forEach((k, v) {
    command..add('-H')..add(escapeString('$k: $v'));
  });
  return (command
        ..addAll(data)
        ..add('--compressed')
        ..add('--insecure'))
      .join(' ');
}