OLD | NEW |
| (Empty) |
1 library http_base.http_base_io; | |
2 | |
3 import 'dart:io' as io; | |
4 import 'dart:async'; | |
5 | |
6 import 'http_base.dart'; | |
7 export 'http_base.dart'; | |
8 | |
9 /// An implementation for [RequestHandler]. It uses dart:io to make http | |
10 /// requests. | |
11 class Client { | |
12 // TODO: Should we provide a mechanism to close (forcefully or not) [_client]? | |
13 final io.HttpClient _client = new io.HttpClient(); | |
14 | |
15 Future<Response> call(Request request) { | |
16 return _client.openUrl(request.method, request.url).then((ioRequest) { | |
17 // TODO: Special case Cookie/Set-Cookie here! | |
18 | |
19 for (var name in request.headers.names) { | |
20 ioRequest.headers.set(name, request.headers[name]); | |
21 } | |
22 | |
23 var stream = request.read(); | |
24 return ioRequest.addStream(stream).then((_) { | |
25 return ioRequest.close(); | |
26 }); | |
27 }).then((io.HttpClientResponse ioResponse) { | |
28 var headerMap = {}; | |
29 ioResponse.headers.forEach((name, values) { | |
30 headerMap[name] = values; | |
31 }); | |
32 var headers = new HeadersImpl(headerMap); | |
33 | |
34 return new ResponseImpl( | |
35 ioResponse.statusCode, headers: headers, body: ioResponse); | |
36 }); | |
37 } | |
38 } | |
OLD | NEW |