ioDeliveryFetch function

DeliveryFetch ioDeliveryFetch({
  1. Duration connectTimeout = const Duration(seconds: 10),
  2. Duration readTimeout = const Duration(seconds: 15),
})

HttpClient 기반 DeliveryFetch. 재검증은 ETag로 직접 하므로 HTTP 캐시는 쓰지 않는다.

Implementation

DeliveryFetch ioDeliveryFetch({
  Duration connectTimeout = const Duration(seconds: 10),
  Duration readTimeout = const Duration(seconds: 15),
}) {
  return (String url, {String? ifNoneMatch}) async {
    final client = HttpClient()..connectionTimeout = connectTimeout;
    try {
      final request = await client.getUrl(Uri.parse(url));
      if (ifNoneMatch != null) request.headers.set(HttpHeaders.ifNoneMatchHeader, ifNoneMatch);
      final response = await request.close().timeout(readTimeout);
      final body = await response.transform(utf8.decoder).join();
      return DeliveryResponse(
        response.statusCode,
        body,
        etag: response.headers.value(HttpHeaders.etagHeader),
      );
    } finally {
      client.close(force: true);
    }
  };
}