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<h.StreamedResponse> send(h.BaseRequest request) async {
  final headers = <String, String>{
    ...request.headers,
  };
  if (request.contentLength != null) {
    headers['content-length'] ??= request.contentLength.toString();
  }
  final rs = await _client.send(
    Request(
      request.method,
      request.url,
      headers: headers,
      body: request.finalize(),
      followRedirects: request.followRedirects,
      maxRedirects: request.maxRedirects,
      persistentConnection: request.persistentConnection,
    ),
  );
  return h.StreamedResponse(
    rs.bodyAsStream as Stream<List<int>>,
    rs.statusCode,
    headers: rs.headers.toSimpleMap(),
    reasonPhrase: rs.reasonPhrase,
    request: request,
    isRedirect: rs.redirects != null && rs.redirects!.isNotEmpty,
    contentLength: int.tryParse(rs.headers['content-length']?.first ?? ''),
  );
}