send method

  1. @override
Future<HttpResponseData> send(
  1. HttpRequestData request, {
  2. DRCancelToken? cancel,
})
override

Implementation

@override
Future<HttpResponseData> send(HttpRequestData request, {DRCancelToken? cancel}) {
  return _guard(request.timeoutMs, cancel, (track) async {
    final req = await _client.openUrl(request.method, request.url);
    track(req);
    req.followRedirects = request.followRedirects;
    request.headers.forEach(req.headers.set);
    final body = request.body;
    if (body != null) {
      req.contentLength = body.length;
      req.add(body);
    } else if (request.method != 'GET') {
      req.contentLength = 0;
    }
    final response = await req.close();
    final bytes = await response.fold<BytesBuilder>(BytesBuilder(copy: false), (b, chunk) => b..add(chunk));
    return HttpResponseData(status: response.statusCode, headers: _headers(response.headers), body: bytes.takeBytes());
  });
}