send method
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);
}
}