blob: f33383d5eda15c07de881a5794925077405d8774 [file] [log] [blame]
library http_base.http_base_io;
import 'dart:io' as io;
import 'dart:async';
import 'http_base.dart';
export 'http_base.dart';
/// An implementation for [RequestHandler]. It uses dart:io to make http
/// requests.
class Client {
// TODO: Should we provide a mechanism to close (forcefully or not) [_client]?
final io.HttpClient _client = new io.HttpClient();
Future<Response> call(Request request) {
return _client.openUrl(request.method, request.url).then((ioRequest) {
// TODO: Special case Cookie/Set-Cookie here!
for (var name in request.headers.names) {
ioRequest.headers.set(name, request.headers[name]);
}
var stream = request.read();
return ioRequest.addStream(stream).then((_) {
return ioRequest.close();
});
}).then((io.HttpClientResponse ioResponse) {
var headerMap = {};
ioResponse.headers.forEach((name, values) {
headerMap[name] = values;
});
var headers = new HeadersImpl(headerMap);
return new ResponseImpl(
ioResponse.statusCode, headers: headers, body: ioResponse);
});
}
}