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<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;
}