- override
Sends an HTTP request and asynchronously returns the response.
Source
@override
Future<StreamedResponse> send(BaseRequest request) async {
dynamic stream = request.finalize();
try {
dynamic ioRequest = await _inner.openUrl(request.method, request.url);
ioRequest
..followRedirects = request.followRedirects
..maxRedirects = request.maxRedirects
..contentLength = request.contentLength == null
? -1
: request.contentLength
..persistentConnection = request.persistentConnection;
request.headers.forEach((String name, String value) {
ioRequest.headers.set(name, value);
});
dynamic response = await stream.pipe(
DelegatingStreamConsumer.typed(ioRequest));
Map<String, dynamic> headers = <String, dynamic>{};
response.headers.forEach((String key, dynamic values) {
headers[key] = values.join(',');
});
return new StreamedResponse(
DelegatingStream.typed/*<List<int>>*/(response).handleError((dynamic error) =>
throw new ClientException(error.message, error.uri),
test: (dynamic error) => io.isHttpException(error)),
response.statusCode,
contentLength: response.contentLength == -1
? null
: response.contentLength,
request: request,
headers: headers,
isRedirect: response.isRedirect,
persistentConnection: response.persistentConnection,
reasonPhrase: response.reasonPhrase);
} catch (error) {
if (!io.isHttpException(error)) rethrow;
throw new ClientException(error.message, error.uri);
}
}