getURL method

Future<String?> getURL(
  1. Uri url, {
  2. Duration? minCertificateValidityTime,
  3. bool checkCertificate = true,
  4. bool log = true,
})

Performs a HTTP request for url. Returns a String with the body if OK.

Implementation

Future<String?> getURL(Uri url,
    {Duration? minCertificateValidityTime,
    bool checkCertificate = true,
    bool log = true}) async {
  HttpClient client = HttpClient()
    ..badCertificateCallback = badCertificateCallback;

  var request = await client.getUrl(url);
  var response = await request.close();

  var ok = response.statusCode == 200;
  if (!ok) return null;

  var certificate = response.certificate;
  if (certificate != null && checkCertificate) {
    var now = DateTime.now();
    var endValidity = certificate.endValidity;
    var timeLeftInValidity = endValidity.difference(now);

    if (timeLeftInValidity.isNegative) {
      _logWarning(
          "URL `${url.scheme}://${url.host}` certificate expired> timeLeftInValidity: ${timeLeftInValidity.inHours} h ; endValidity: $endValidity ; now: $now");
      return null;
    }

    if (minCertificateValidityTime != null &&
        timeLeftInValidity < minCertificateValidityTime) {
      _logWarning(
          "URL `${url.scheme}://${url.host}` certificate short validity period> timeLeftInValidity: ${timeLeftInValidity.inHours} h ; minCertificateValidityTime: ${minCertificateValidityTime.inHours} h ; endValidity: $endValidity ; now: $now");
      return null;
    }
  }

  var data = await response.transform(Utf8Decoder()).toList();
  var body = data.join();

  return body;
}