Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart.io; | 5 part of dart.io; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * HTTP status codes. | 8 * HTTP status codes. |
| 9 */ | 9 */ |
| 10 abstract class HttpStatus { | 10 abstract class HttpStatus { |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 76 * [InternetAddress] on port 80, and listening to requests. | 76 * [InternetAddress] on port 80, and listening to requests. |
| 77 * | 77 * |
| 78 * HttpServer.bind(InternetAddress.ANY_IP_V6, 80).then((server) { | 78 * HttpServer.bind(InternetAddress.ANY_IP_V6, 80).then((server) { |
| 79 * server.listen((HttpRequest request) { | 79 * server.listen((HttpRequest request) { |
| 80 * // Handle requests. | 80 * // Handle requests. |
| 81 * }); | 81 * }); |
| 82 * }); | 82 * }); |
| 83 */ | 83 */ |
| 84 abstract class HttpServer implements Stream<HttpRequest> { | 84 abstract class HttpServer implements Stream<HttpRequest> { |
| 85 /** | 85 /** |
| 86 * Set and get the default value of the `Server` header for all responses | |
| 87 * generated by this [HttpServer]. The default value is | |
| 88 * `Dart/<version> (dart:io)`. | |
| 89 * | |
| 90 * If the serverHeader is set to `null`, no default `Server` header will be | |
| 91 * added to each response. | |
| 92 */ | |
| 93 String serverHeader; | |
| 94 | |
| 95 /** | |
| 96 * Get or set the timeout used for idle keep-alive connections. If no further | |
| 97 * request is seen within [idleTimeout] after the previous request was | |
| 98 * completed, the connection is droped. | |
|
Lasse Reichstein Nielsen
2014/01/06 09:29:30
droped -> dropped
| |
| 99 * | |
| 100 * Default is 120 seconds. | |
| 101 * | |
| 102 * To disable, set [idleTimeout] to `null`. | |
| 103 */ | |
| 104 Duration idleTimeout; | |
| 105 | |
| 106 /** | |
| 86 * Starts listening for HTTP requests on the specified [address] and | 107 * Starts listening for HTTP requests on the specified [address] and |
| 87 * [port]. | 108 * [port]. |
| 88 * | 109 * |
| 89 * The [address] can either be a [String] or an | 110 * The [address] can either be a [String] or an |
| 90 * [InternetAddress]. If [address] is a [String], [bind] will | 111 * [InternetAddress]. If [address] is a [String], [bind] will |
| 91 * perform a [InternetAddress.lookup] and use the first value in the | 112 * perform a [InternetAddress.lookup] and use the first value in the |
| 92 * list. To listen on the loopback adapter, which will allow only | 113 * list. To listen on the loopback adapter, which will allow only |
| 93 * incoming connections from the local host, use the value | 114 * incoming connections from the local host, use the value |
| 94 * [InternetAddress.LOOPBACK_IP_V4] or | 115 * [InternetAddress.LOOPBACK_IP_V4] or |
| 95 * [InternetAddress.LOOPBACK_IP_V6]. To allow for incoming | 116 * [InternetAddress.LOOPBACK_IP_V6]. To allow for incoming |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 198 * Sets the timeout, in seconds, for sessions of this [HttpServer]. | 219 * Sets the timeout, in seconds, for sessions of this [HttpServer]. |
| 199 * The default timeout is 20 minutes. | 220 * The default timeout is 20 minutes. |
| 200 */ | 221 */ |
| 201 set sessionTimeout(int timeout); | 222 set sessionTimeout(int timeout); |
| 202 | 223 |
| 203 /** | 224 /** |
| 204 * Returns an [HttpConnectionsInfo] object summarizing the number of | 225 * Returns an [HttpConnectionsInfo] object summarizing the number of |
| 205 * current connections handled by the server. | 226 * current connections handled by the server. |
| 206 */ | 227 */ |
| 207 HttpConnectionsInfo connectionsInfo(); | 228 HttpConnectionsInfo connectionsInfo(); |
| 208 | |
| 209 /** | |
| 210 * Set and get the default value of the `Server` header for all responses | |
| 211 * generated by this [HttpServer]. The default value is | |
| 212 * `Dart/<version> (dart:io)`. | |
| 213 * | |
| 214 * If the serverHeader is set to `null`, no default `Server` header will be | |
| 215 * added to each response. | |
| 216 */ | |
| 217 String serverHeader; | |
| 218 | |
| 219 /** | |
| 220 * Get or set the timeout used for idle keep-alive connections. If no further | |
| 221 * request is seen within [idleTimeout] after the previous request was | |
| 222 * completed, the connection is droped. | |
| 223 * | |
| 224 * Default is 120 seconds. | |
| 225 * | |
| 226 * To disable, set [idleTimeout] to `null`. | |
| 227 */ | |
| 228 Duration idleTimeout; | |
| 229 } | 229 } |
| 230 | 230 |
| 231 | 231 |
| 232 /** | 232 /** |
| 233 * Summary statistics about an [HttpServer]s current socket connections. | 233 * Summary statistics about an [HttpServer]s current socket connections. |
| 234 */ | 234 */ |
| 235 class HttpConnectionsInfo { | 235 class HttpConnectionsInfo { |
| 236 /** | 236 /** |
| 237 * Total number of socket connections. | 237 * Total number of socket connections. |
| 238 */ | 238 */ |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 365 IF_RANGE, | 365 IF_RANGE, |
| 366 IF_UNMODIFIED_SINCE, | 366 IF_UNMODIFIED_SINCE, |
| 367 MAX_FORWARDS, | 367 MAX_FORWARDS, |
| 368 PROXY_AUTHORIZATION, | 368 PROXY_AUTHORIZATION, |
| 369 RANGE, | 369 RANGE, |
| 370 REFERER, | 370 REFERER, |
| 371 TE, | 371 TE, |
| 372 USER_AGENT]; | 372 USER_AGENT]; |
| 373 | 373 |
| 374 /** | 374 /** |
| 375 * Gets and sets the date. The value of this property will | |
| 376 * reflect the 'date' header. | |
| 377 */ | |
| 378 DateTime date; | |
| 379 | |
| 380 /** | |
| 381 * Gets and sets the expiry date. The value of this property will | |
| 382 * reflect the 'expires' header. | |
| 383 */ | |
| 384 DateTime expires; | |
| 385 | |
| 386 /** | |
| 387 * Gets and sets the "if-modified-since" date. The value of this property will | |
| 388 * reflect the "if-modified-since" header. | |
| 389 */ | |
| 390 DateTime ifModifiedSince; | |
| 391 | |
| 392 /** | |
| 393 * Gets and sets the host part of the 'host' header for the | |
| 394 * connection. | |
| 395 */ | |
| 396 String host; | |
| 397 | |
| 398 /** | |
| 399 * Gets and sets the port part of the 'host' header for the | |
| 400 * connection. | |
| 401 */ | |
| 402 int port; | |
| 403 | |
| 404 /** | |
| 405 * Gets and sets the content type. Note that the content type in the | |
| 406 * header will only be updated if this field is set | |
| 407 * directly. Mutating the returned current value will have no | |
| 408 * effect. | |
| 409 */ | |
| 410 ContentType contentType; | |
| 411 | |
| 412 /** | |
| 413 * Gets and sets the content length header value. | |
| 414 */ | |
| 415 int contentLength; | |
| 416 | |
| 417 /** | |
| 418 * Gets and sets the persistent connection header value. | |
| 419 */ | |
| 420 bool persistentConnection; | |
| 421 | |
| 422 /** | |
| 423 * Gets and sets the chunked transfer encoding header value. | |
| 424 */ | |
| 425 bool chunkedTransferEncoding; | |
| 426 | |
| 427 /** | |
| 375 * Returns the list of values for the header named [name]. If there | 428 * Returns the list of values for the header named [name]. If there |
| 376 * is no header with the provided name, [:null:] will be returned. | 429 * is no header with the provided name, [:null:] will be returned. |
| 377 */ | 430 */ |
| 378 List<String> operator[](String name); | 431 List<String> operator[](String name); |
| 379 | 432 |
| 380 /** | 433 /** |
| 381 * Convenience method for the value for a single valued header. If | 434 * Convenience method for the value for a single valued header. If |
| 382 * there is no header with the provided name, [:null:] will be | 435 * there is no header with the provided name, [:null:] will be |
| 383 * returned. If the header has more than one value an exception is | 436 * returned. If the header has more than one value an exception is |
| 384 * thrown. | 437 * thrown. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 424 */ | 477 */ |
| 425 void forEach(void f(String name, List<String> values)); | 478 void forEach(void f(String name, List<String> values)); |
| 426 | 479 |
| 427 /** | 480 /** |
| 428 * Disables folding for the header named [name] when sending the HTTP | 481 * Disables folding for the header named [name] when sending the HTTP |
| 429 * header. By default, multiple header values are folded into a | 482 * header. By default, multiple header values are folded into a |
| 430 * single header line by separating the values with commas. The | 483 * single header line by separating the values with commas. The |
| 431 * 'set-cookie' header has folding disabled by default. | 484 * 'set-cookie' header has folding disabled by default. |
| 432 */ | 485 */ |
| 433 void noFolding(String name); | 486 void noFolding(String name); |
| 434 | |
| 435 /** | |
| 436 * Gets and sets the date. The value of this property will | |
| 437 * reflect the 'date' header. | |
| 438 */ | |
| 439 DateTime date; | |
| 440 | |
| 441 /** | |
| 442 * Gets and sets the expiry date. The value of this property will | |
| 443 * reflect the 'expires' header. | |
| 444 */ | |
| 445 DateTime expires; | |
| 446 | |
| 447 /** | |
| 448 * Gets and sets the "if-modified-since" date. The value of this property will | |
| 449 * reflect the "if-modified-since" header. | |
| 450 */ | |
| 451 DateTime ifModifiedSince; | |
| 452 | |
| 453 /** | |
| 454 * Gets and sets the host part of the 'host' header for the | |
| 455 * connection. | |
| 456 */ | |
| 457 String host; | |
| 458 | |
| 459 /** | |
| 460 * Gets and sets the port part of the 'host' header for the | |
| 461 * connection. | |
| 462 */ | |
| 463 int port; | |
| 464 | |
| 465 /** | |
| 466 * Gets and sets the content type. Note that the content type in the | |
| 467 * header will only be updated if this field is set | |
| 468 * directly. Mutating the returned current value will have no | |
| 469 * effect. | |
| 470 */ | |
| 471 ContentType contentType; | |
| 472 | |
| 473 /** | |
| 474 * Gets and sets the content length header value. | |
| 475 */ | |
| 476 int contentLength; | |
| 477 | |
| 478 /** | |
| 479 * Gets and sets the persistent connection header value. | |
| 480 */ | |
| 481 bool persistentConnection; | |
| 482 | |
| 483 /** | |
| 484 * Gets and sets the chunked transfer encoding header value. | |
| 485 */ | |
| 486 bool chunkedTransferEncoding; | |
| 487 } | 487 } |
| 488 | 488 |
| 489 | 489 |
| 490 /** | 490 /** |
| 491 * Representation of a header value in the form: | 491 * Representation of a header value in the form: |
| 492 * | 492 * |
| 493 * [:value; parameter1=value1; parameter2=value2:] | 493 * [:value; parameter1=value1; parameter2=value2:] |
| 494 * | 494 * |
| 495 * [HeaderValue] can be used to conveniently build and parse header | 495 * [HeaderValue] can be used to conveniently build and parse header |
| 496 * values on this form. | 496 * values on this form. |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 640 | 640 |
| 641 /** | 641 /** |
| 642 * Representation of a cookie. For cookies received by the server as | 642 * Representation of a cookie. For cookies received by the server as |
| 643 * Cookie header values only [:name:] and [:value:] fields will be | 643 * Cookie header values only [:name:] and [:value:] fields will be |
| 644 * set. When building a cookie for the 'set-cookie' header in the server | 644 * set. When building a cookie for the 'set-cookie' header in the server |
| 645 * and when receiving cookies in the client as 'set-cookie' headers all | 645 * and when receiving cookies in the client as 'set-cookie' headers all |
| 646 * fields can be used. | 646 * fields can be used. |
| 647 */ | 647 */ |
| 648 abstract class Cookie { | 648 abstract class Cookie { |
| 649 /** | 649 /** |
| 650 * Creates a new cookie optionally setting the name and value. | |
| 651 */ | |
| 652 factory Cookie([String name, String value]) => new _Cookie(name, value); | |
| 653 | |
| 654 /** | |
| 655 * Creates a new cookie by parsing a header value from a 'set-cookie' | |
| 656 * header. | |
| 657 */ | |
| 658 factory Cookie.fromSetCookieValue(String value) { | |
| 659 return new _Cookie.fromSetCookieValue(value); | |
| 660 } | |
| 661 | |
| 662 /** | |
| 663 * Gets and sets the name. | 650 * Gets and sets the name. |
| 664 */ | 651 */ |
| 665 String name; | 652 String name; |
| 666 | 653 |
| 667 /** | 654 /** |
| 668 * Gets and sets the value. | 655 * Gets and sets the value. |
| 669 */ | 656 */ |
| 670 String value; | 657 String value; |
| 671 | 658 |
| 672 /** | 659 /** |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 694 * Gets and sets whether this cookie is secure. | 681 * Gets and sets whether this cookie is secure. |
| 695 */ | 682 */ |
| 696 bool secure; | 683 bool secure; |
| 697 | 684 |
| 698 /** | 685 /** |
| 699 * Gets and sets whether this cookie is HTTP only. | 686 * Gets and sets whether this cookie is HTTP only. |
| 700 */ | 687 */ |
| 701 bool httpOnly; | 688 bool httpOnly; |
| 702 | 689 |
| 703 /** | 690 /** |
| 691 * Creates a new cookie optionally setting the name and value. | |
| 692 */ | |
| 693 factory Cookie([String name, String value]) => new _Cookie(name, value); | |
| 694 | |
| 695 /** | |
| 696 * Creates a new cookie by parsing a header value from a 'set-cookie' | |
| 697 * header. | |
| 698 */ | |
| 699 factory Cookie.fromSetCookieValue(String value) { | |
| 700 return new _Cookie.fromSetCookieValue(value); | |
| 701 } | |
| 702 | |
| 703 /** | |
| 704 * Returns the formatted string representation of the cookie. The | 704 * Returns the formatted string representation of the cookie. The |
| 705 * string representation can be used for for setting the Cookie or | 705 * string representation can be used for for setting the Cookie or |
| 706 * 'set-cookie' headers | 706 * 'set-cookie' headers |
| 707 */ | 707 */ |
| 708 String toString(); | 708 String toString(); |
| 709 } | 709 } |
| 710 | 710 |
| 711 | 711 |
| 712 /** | 712 /** |
| 713 * A server-side object | 713 * A server-side object |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 731 * In the following code, an HttpServer listens | 731 * In the following code, an HttpServer listens |
| 732 * for HTTP requests and, within the callback function, | 732 * for HTTP requests and, within the callback function, |
| 733 * uses the HttpRequest object's `method` property to dispatch requests. | 733 * uses the HttpRequest object's `method` property to dispatch requests. |
| 734 * | 734 * |
| 735 * final HOST = InternetAddress.LOOPBACK_IP_V4; | 735 * final HOST = InternetAddress.LOOPBACK_IP_V4; |
| 736 * final PORT = 4040; | 736 * final PORT = 4040; |
| 737 * | 737 * |
| 738 * HttpServer.bind(HOST, PORT).then((_server) { | 738 * HttpServer.bind(HOST, PORT).then((_server) { |
| 739 * _server.listen((HttpRequest request) { | 739 * _server.listen((HttpRequest request) { |
| 740 * switch (request.method) { | 740 * switch (request.method) { |
| 741 * case 'GET': | 741 * case 'GET': |
| 742 * handleGetRequest(request); | 742 * handleGetRequest(request); |
| 743 * break; | 743 * break; |
| 744 * case 'POST': | 744 * case 'POST': |
| 745 * ... | 745 * ... |
| 746 * } | 746 * } |
| 747 * }, | 747 * }, |
| 748 * onError: handleError); // listen() failed. | 748 * onError: handleError); // listen() failed. |
| 749 * }).catchError(handleError); | 749 * }).catchError(handleError); |
| 750 * | 750 * |
| 751 * Listen to the HttpRequest stream to handle the | 751 * Listen to the HttpRequest stream to handle the |
| 752 * data and be notified once the entire body is received. | 752 * data and be notified once the entire body is received. |
| 753 * An HttpRequest object contains an [HttpResponse] object, | 753 * An HttpRequest object contains an [HttpResponse] object, |
| 754 * to which the server can write its response. | 754 * to which the server can write its response. |
| 755 * For example, here's a skeletal callback function | 755 * For example, here's a skeletal callback function |
| 756 * that responds to a request: | 756 * that responds to a request: |
| 757 * | 757 * |
| 758 * void handleGetRequest(HttpRequest req) { | 758 * void handleGetRequest(HttpRequest req) { |
| 759 * HttpResponse res = req.response; | 759 * HttpResponse res = req.response; |
| 760 * var body = []; | 760 * var body = []; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 817 * The session for the given request (read-only). | 817 * The session for the given request (read-only). |
| 818 * | 818 * |
| 819 * If the session is | 819 * If the session is |
| 820 * being initialized by this call, [:isNew:] is true for the returned | 820 * being initialized by this call, [:isNew:] is true for the returned |
| 821 * session. | 821 * session. |
| 822 * See [HttpServer.sessionTimeout] on how to change default timeout. | 822 * See [HttpServer.sessionTimeout] on how to change default timeout. |
| 823 */ | 823 */ |
| 824 HttpSession get session; | 824 HttpSession get session; |
| 825 | 825 |
| 826 /** | 826 /** |
| 827 * The HTTP protocol version used in the request, | 827 * The HTTP protocol version used in the request, |
| 828 * either "1.0" or "1.1" (read-only). | 828 * either "1.0" or "1.1" (read-only). |
| 829 */ | 829 */ |
| 830 String get protocolVersion; | 830 String get protocolVersion; |
| 831 | 831 |
| 832 /** | 832 /** |
| 833 * Information about the client connection (read-only). | 833 * Information about the client connection (read-only). |
| 834 * | 834 * |
| 835 * Returns [null] if the socket is not available. | 835 * Returns [null] if the socket is not available. |
| 836 */ | 836 */ |
| 837 HttpConnectionInfo get connectionInfo; | 837 HttpConnectionInfo get connectionInfo; |
| (...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1323 * | 1323 * |
| 1324 * HttpClientRequest request = ... | 1324 * HttpClientRequest request = ... |
| 1325 * request.headers.add(HttpHeaders.CONTENT_TYPE, "text/plain"); | 1325 * request.headers.add(HttpHeaders.CONTENT_TYPE, "text/plain"); |
| 1326 * request.write(...); // Strings written will be ISO-8859-1 encoded. | 1326 * request.write(...); // Strings written will be ISO-8859-1 encoded. |
| 1327 * | 1327 * |
| 1328 * If an unsupported encoding is used an exception will be thrown if | 1328 * If an unsupported encoding is used an exception will be thrown if |
| 1329 * using one of the write methods taking a string. | 1329 * using one of the write methods taking a string. |
| 1330 */ | 1330 */ |
| 1331 abstract class HttpClientRequest implements IOSink { | 1331 abstract class HttpClientRequest implements IOSink { |
| 1332 /** | 1332 /** |
| 1333 * Gets and sets the requested persistent connection state. | |
| 1334 * The default value is [:true:]. | |
| 1335 */ | |
| 1336 bool persistentConnection; | |
| 1337 | |
| 1338 /** | |
| 1339 * Set this property to [:true:] if this request should | |
| 1340 * automatically follow redirects. The default is [:true:]. | |
| 1341 * | |
| 1342 * Automatic redirect will only happen for "GET" and "HEAD" requests | |
| 1343 * and only for the status codes [:HttpHeaders.MOVED_PERMANENTLY:] | |
| 1344 * (301), [:HttpStatus.FOUND:] (302), | |
| 1345 * [:HttpStatus.MOVED_TEMPORARILY:] (302, alias for | |
| 1346 * [:HttpStatus.FOUND:]), [:HttpStatus.SEE_OTHER:] (303) and | |
| 1347 * [:HttpStatus.TEMPORARY_REDIRECT:] (307). For | |
| 1348 * [:HttpStatus.SEE_OTHER:] (303) autmatic redirect will also happen | |
| 1349 * for "POST" requests with the method changed to "GET" when | |
| 1350 * following the redirect. | |
| 1351 * | |
| 1352 * All headers added to the request will be added to the redirection | |
| 1353 * request(s). However, any body send with the request will not be | |
| 1354 * part of the redirection request(s). | |
| 1355 */ | |
| 1356 bool followRedirects; | |
| 1357 | |
| 1358 /** | |
| 1359 * Set this property to the maximum number of redirects to follow | |
| 1360 * when [followRedirects] is [:true:]. If this number is exceeded the | |
| 1361 * [onError] callback will be called with a [RedirectException]. | |
| 1362 * | |
| 1363 * The default value is 5. | |
| 1364 */ | |
| 1365 int maxRedirects; | |
| 1366 | |
| 1367 /** | |
| 1333 * The method of the request. | 1368 * The method of the request. |
| 1334 */ | 1369 */ |
| 1335 String get method; | 1370 String get method; |
| 1336 | 1371 |
| 1337 /** | 1372 /** |
| 1338 * The uri of the request. | 1373 * The uri of the request. |
| 1339 */ | 1374 */ |
| 1340 Uri get uri; | 1375 Uri get uri; |
| 1341 | 1376 |
| 1342 /** | 1377 /** |
| 1343 * Gets and sets the content length of the request. If the size of | 1378 * Gets and sets the content length of the request. If the size of |
| 1344 * the request is not known in advance set content length to -1, | 1379 * the request is not known in advance set content length to -1, |
| 1345 * which is also the default. | 1380 * which is also the default. |
| 1346 */ | 1381 */ |
| 1347 int contentLength; | 1382 int contentLength; |
| 1348 | 1383 |
| 1349 /** | 1384 /** |
| 1350 * Returns the request headers. | 1385 * Returns the request headers. |
| 1351 */ | 1386 */ |
| 1352 HttpHeaders get headers; | 1387 HttpHeaders get headers; |
| 1353 | 1388 |
| 1354 /** | 1389 /** |
| 1355 * Cookies to present to the server (in the 'cookie' header). | 1390 * Cookies to present to the server (in the 'cookie' header). |
| 1356 */ | 1391 */ |
| 1357 List<Cookie> get cookies; | 1392 List<Cookie> get cookies; |
| 1358 | 1393 |
| 1359 /** | 1394 /** |
| 1360 * Gets and sets the requested persistent connection state. | |
| 1361 * The default value is [:true:]. | |
| 1362 */ | |
| 1363 bool persistentConnection; | |
| 1364 | |
| 1365 /** | |
| 1366 * A [HttpClientResponse] future that will complete once the response is | 1395 * A [HttpClientResponse] future that will complete once the response is |
| 1367 * available. If an error occurs before the response is available, this | 1396 * available. If an error occurs before the response is available, this |
| 1368 * future will complete with an error. | 1397 * future will complete with an error. |
| 1369 */ | 1398 */ |
| 1370 Future<HttpClientResponse> get done; | 1399 Future<HttpClientResponse> get done; |
| 1371 | 1400 |
| 1372 /** | 1401 /** |
| 1373 * Close the request for input. Returns the value of [done]. | 1402 * Close the request for input. Returns the value of [done]. |
| 1374 */ | 1403 */ |
| 1375 Future<HttpClientResponse> close(); | 1404 Future<HttpClientResponse> close(); |
| 1376 | 1405 |
| 1377 /** | 1406 /** |
| 1378 * Set this property to [:true:] if this request should | |
| 1379 * automatically follow redirects. The default is [:true:]. | |
| 1380 * | |
| 1381 * Automatic redirect will only happen for "GET" and "HEAD" requests | |
| 1382 * and only for the status codes [:HttpHeaders.MOVED_PERMANENTLY:] | |
| 1383 * (301), [:HttpStatus.FOUND:] (302), | |
| 1384 * [:HttpStatus.MOVED_TEMPORARILY:] (302, alias for | |
| 1385 * [:HttpStatus.FOUND:]), [:HttpStatus.SEE_OTHER:] (303) and | |
| 1386 * [:HttpStatus.TEMPORARY_REDIRECT:] (307). For | |
| 1387 * [:HttpStatus.SEE_OTHER:] (303) autmatic redirect will also happen | |
| 1388 * for "POST" requests with the method changed to "GET" when | |
| 1389 * following the redirect. | |
| 1390 * | |
| 1391 * All headers added to the request will be added to the redirection | |
| 1392 * request(s). However, any body send with the request will not be | |
| 1393 * part of the redirection request(s). | |
| 1394 */ | |
| 1395 bool followRedirects; | |
| 1396 | |
| 1397 /** | |
| 1398 * Set this property to the maximum number of redirects to follow | |
| 1399 * when [followRedirects] is [:true:]. If this number is exceeded the | |
| 1400 * [onError] callback will be called with a [RedirectException]. | |
| 1401 * | |
| 1402 * The default value is 5. | |
| 1403 */ | |
| 1404 int maxRedirects; | |
| 1405 | |
| 1406 /** | |
| 1407 * Get information about the client connection. Returns [null] if the socket | 1407 * Get information about the client connection. Returns [null] if the socket |
| 1408 * is not available. | 1408 * is not available. |
| 1409 */ | 1409 */ |
| 1410 HttpConnectionInfo get connectionInfo; | 1410 HttpConnectionInfo get connectionInfo; |
| 1411 } | 1411 } |
| 1412 | 1412 |
| 1413 | 1413 |
| 1414 /** | 1414 /** |
| 1415 * HTTP response for a client connection. The [HttpClientResponse] is a | 1415 * HTTP response for a client connection. The [HttpClientResponse] is a |
| 1416 * [Stream] of the body content of the response. Listen to the body to handle | 1416 * [Stream] of the body content of the response. Listen to the body to handle |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1577 } | 1577 } |
| 1578 | 1578 |
| 1579 | 1579 |
| 1580 class HttpException implements IOException { | 1580 class HttpException implements IOException { |
| 1581 final String message; | 1581 final String message; |
| 1582 final Uri uri; | 1582 final Uri uri; |
| 1583 | 1583 |
| 1584 const HttpException(String this.message, {Uri this.uri}); | 1584 const HttpException(String this.message, {Uri this.uri}); |
| 1585 | 1585 |
| 1586 String toString() { | 1586 String toString() { |
| 1587 var b = new StringBuffer(); | 1587 var b = new StringBuffer() |
| 1588 b.write('HttpException: '); | 1588 ..write('HttpException: ') |
|
Lasse Reichstein Nielsen
2014/01/06 09:29:30
Indent by 4.
| |
| 1589 b.write(message); | 1589 ..write(message); |
| 1590 if (uri != null) { | 1590 if (uri != null) { |
| 1591 b.write(', uri = $uri'); | 1591 b.write(', uri = $uri'); |
| 1592 } | 1592 } |
| 1593 return b.toString(); | 1593 return b.toString(); |
| 1594 } | 1594 } |
| 1595 } | 1595 } |
| 1596 | 1596 |
| 1597 | 1597 |
| 1598 class RedirectException implements HttpException { | 1598 class RedirectException implements HttpException { |
| 1599 final String message; | 1599 final String message; |
| 1600 final List<RedirectInfo> redirects; | 1600 final List<RedirectInfo> redirects; |
| 1601 | 1601 |
| 1602 const RedirectException(String this.message, | 1602 const RedirectException(this.message, this.redirects); |
| 1603 List<RedirectInfo> this.redirects); | |
| 1604 | 1603 |
| 1605 String toString() => "RedirectException: $message"; | 1604 String toString() => "RedirectException: $message"; |
| 1606 | 1605 |
| 1607 Uri get uri => redirects.last.location; | 1606 Uri get uri => redirects.last.location; |
| 1608 } | 1607 } |
| OLD | NEW |