send method

  1. @override
Future<RawHttpResponse> send(
  1. RawHttpRequest request
)
override

Sends request and buffers the whole response body in memory.

Implementation

@override
Future<RawHttpResponse> send(RawHttpRequest request) async {
  final binding = _Binding(request.cancellationToken);
  try {
    final options = await _compose(request, binding, ResponseType.bytes);
    final response = await _dio.fetch<Object>(options);
    final statusCode = _requireStatus(response, request.uri);
    final data = response.data;
    return RawHttpResponse(
      statusCode: statusCode,
      headers: _copyHeaders(response.headers.map),
      bodyBytes: data is List<int> ? data : const [],
      redirected: _followedRedirect(
        statusCode,
        isRedirect: response.isRedirect,
        redirectCount: response.redirects.length,
      ),
    );
  } on DioException catch (error) {
    throw _toRawException(error, request.uri);
  } finally {
    binding.release();
  }
}