cancelableHead static method

CancelableOperation<HttpUtilResponse> cancelableHead(
  1. String url, {
  2. List<int> expectedStatusCodes = const [200],
  3. Map<String, String> requestHeaders = const {},
  4. Client? client,
})

Implementation

static CancelableOperation<HttpUtilResponse> cancelableHead(
  String url, {
  List<int> expectedStatusCodes = const [200],
  Map<String, String> requestHeaders = const {},
  http.Client? client,
}) {
  var cpl = Completer<void>();
  var req = http.AbortableRequest('HEAD', Uri.parse(url), abortTrigger: cpl.future);
  req.headers.addAll(requestHeaders);

  var c = client ?? http.Client();
  return CancelableOperation.fromFuture(
    () async {
      var resp = await c.send(req);
      cpl.complete();
      var total = int.tryParse(resp.headers['Content-Length'] ?? '');
      if (!expectedStatusCodes.contains(resp.statusCode)) {
        throw HttpUtilUnexpectedException(
          HttpUtilResponse(
            resp.statusCode,
            utf8.decode(await resp.stream.toBytes(), allowMalformed: true),
            resp.headers['Content-Type'],
            total,
          ),
        );
      }

      return HttpUtilResponse(resp.statusCode, null, resp.headers['Content-Type'], total);
    }(),
    onCancel: () {
      cpl.complete();
      throw http.RequestAbortedException(req.url);
    },
  );
}