toCurl function
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(' ');
}