send method

  1. @override
Future<StreamedResponse> send(
  1. BaseRequest request
)

Sends an HTTP request and asynchronously returns the response.

Implementers should call BaseRequest.finalize to get the body of the request as a ByteStream. They shouldn't make any assumptions about the state of the stream; it could have data written to it asynchronously at a later point, or it could already be closed when it's returned. Any internal HTTP errors should be wrapped as ClientExceptions.

Implementation

@override
Future<StreamedResponse> send(BaseRequest request) async {
  _httpLogger.logRequest(request);

  StreamedResponse response = await _delegate.send(request);

  // Simple request & need log body
  if ((request is Request || request is MultipartRequest) && (config.logOutputBody || response.statusCode >= 400)) {
    final bytes = await response.stream.toBytes();
    _httpLogger.logResponse(request, response, bytes);

    // recreate response with new stream, because old stream is already consumed
    response = StreamedResponse(
      ByteStream.fromBytes(bytes),
      response.statusCode,
      contentLength: response.contentLength,
      request: request,
      headers: response.headers,
      isRedirect: response.isRedirect,
      persistentConnection: response.persistentConnection,
      reasonPhrase: response.reasonPhrase,
    );
  } else {
    _httpLogger.logResponse(request, response);
  }

  return response;
}