send method
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 ClientException
s.
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 ?? ''),
);
}