send method

  1. @override
Future<AiHttpResponse> send(
  1. AiHttpRequest request
)
override

Implementation

@override
Future<AiHttpResponse> send(AiHttpRequest request) async {
  final client = HttpClient();
  try {
    final req = await client
        .openUrl(request.method.toUpperCase(), request.uri)
        .timeout(timeout);

    request.headers.forEach(req.headers.set);

    final body = request.body;
    if (body != null) {
      if (body is List<int>) {
        req.add(body);
      } else {
        req.write(body.toString());
      }
    }

    final response = await req.close().timeout(timeout);
    final responseHeaders = <String, String>{};
    response.headers.forEach((name, values) {
      responseHeaders[name] = values.join(', ');
    });

    final responseBody = await utf8.decoder.bind(response).join();
    return AiHttpResponse(
      statusCode: response.statusCode,
      headers: responseHeaders,
      body: responseBody,
    );
  } on SocketException catch (error) {
    throw AiHttpException('Network request failed', cause: error);
  } on TimeoutException catch (error) {
    throw AiHttpException('HTTP request timed out', cause: error);
  } finally {
    client.close(force: true);
  }
}