Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(415)

Side by Side Diff: runtime/bin/http.dart

Issue 10386024: Add redirect support to the HTTP client (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | runtime/bin/http_impl.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 /** 5 /**
6 * HTTP status codes. 6 * HTTP status codes.
7 */ 7 */
8 interface HttpStatus { 8 interface HttpStatus {
9 static final int CONTINUE = 100; 9 static final int CONTINUE = 100;
10 static final int SWITCHING_PROTOCOLS = 101; 10 static final int SWITCHING_PROTOCOLS = 101;
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 */ 499 */
500 void set onResponse(void callback(HttpClientResponse response)); 500 void set onResponse(void callback(HttpClientResponse response));
501 501
502 /** 502 /**
503 * Sets the handler that gets called if an error occurs while 503 * Sets the handler that gets called if an error occurs while
504 * connecting or processing the HTTP request. 504 * connecting or processing the HTTP request.
505 */ 505 */
506 void set onError(void callback(e)); 506 void set onError(void callback(e));
507 507
508 /** 508 /**
509 * Set this property to [:true:] if this connection should
510 * automatically follow redirects. The default is [:true:].
511 */
512 bool followRedirect;
513
514 /**
515 * Set this property to the maximum number of redirects to follow
516 * when [followRedirect] is [:true:]. If this number is exceeded the
517 * [onError] callback will be called with a [RedirectLimitExceeded]
518 * exception. The default value is 5.
519 */
520 int maxRedirects;
521
522 /**
523 * Returns the series of redirects this connection has been through.
524 */
525 List<RedirectInfo> get redirects();
526
527 /**
528 * Redirect this connection to a new URL. The default value for
529 * [method] is the method for the current request. The default value
530 * for [url] is the value of the [:HttpStatus.LOCATION:] header of
531 * the current response. All body data must have been read from the
532 * current response before calling [redirect].
533 */
534 void redirect([String method, Uri url]);
535
536 /**
509 * Detach the underlying socket from the HTTP client. When the 537 * Detach the underlying socket from the HTTP client. When the
510 * socket is detached the HTTP client will no longer perform any 538 * socket is detached the HTTP client will no longer perform any
511 * operations on it. 539 * operations on it.
512 * 540 *
513 * This is normally used when a HTTP upgrade is negotiated and the 541 * This is normally used when a HTTP upgrade is negotiated and the
514 * communication should continue with a different protocol. 542 * communication should continue with a different protocol.
515 */ 543 */
516 DetachedSocket detachSocket(); 544 DetachedSocket detachSocket();
517 } 545 }
518 546
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 */ 588 */
561 String get reasonPhrase(); 589 String get reasonPhrase();
562 590
563 /** 591 /**
564 * Returns the content length of the request body. If the size of 592 * Returns the content length of the request body. If the size of
565 * the request body is not known in advance this -1. 593 * the request body is not known in advance this -1.
566 */ 594 */
567 int get contentLength(); 595 int get contentLength();
568 596
569 /** 597 /**
598 * Returns whether the status code is one of the normal redirect
599 * codes [:HttpStatus.MOVED_PERMANENTLY:], [:HttpStatus.FOUND:],
600 * [:HttpStatus.MOVED_TEMPORARILY:], [:HttpStatus.SEE_OTHER:] and
601 * [:HttpStatus.TEMPORARY_REDIRECT:].
602 */
603 bool get isRedirect();
604
605 /**
570 * Returns the response headers. 606 * Returns the response headers.
571 */ 607 */
572 HttpHeaders get headers(); 608 HttpHeaders get headers();
573 609
574 /** 610 /**
575 * Returns the input stream for the response. This is used to read 611 * Returns the input stream for the response. This is used to read
576 * the response data. 612 * the response data.
577 */ 613 */
578 InputStream get inputStream(); 614 InputStream get inputStream();
579 } 615 }
580 616
581 617
582 /** 618 /**
619 * Redirect information.
620 */
621 interface RedirectInfo {
622 /**
623 * Returns the status code used for the redirect.
624 */
625 int get statusCode();
626
627 /**
628 * Returns the method used for the redirect.
629 */
630 String get method();
631
632 /**
633 * Returns the location for the redirect.
634 */
635 Uri get location();
636 }
637
638
639 /**
583 * When detaching a socket from either the [:HttpServer:] or the 640 * When detaching a socket from either the [:HttpServer:] or the
584 * [:HttpClient:] due to a HTTP connection upgrade there might be 641 * [:HttpClient:] due to a HTTP connection upgrade there might be
585 * unparsed data already read from the socket. This unparsed data 642 * unparsed data already read from the socket. This unparsed data
586 * together with the detached socket is returned in an instance of 643 * together with the detached socket is returned in an instance of
587 * this class. 644 * this class.
588 */ 645 */
589 interface DetachedSocket default _DetachedSocket { 646 interface DetachedSocket default _DetachedSocket {
590 Socket get socket(); 647 Socket get socket();
591 List<int> get unparsedData(); 648 List<int> get unparsedData();
592 } 649 }
593 650
594 651
595 class HttpException implements Exception { 652 class HttpException implements Exception {
596 const HttpException([String this.message = ""]); 653 const HttpException([String this.message = ""]);
597 String toString() => "HttpException: $message"; 654 String toString() => "HttpException: $message";
598 final String message; 655 final String message;
599 } 656 }
657
658
659 class RedirectException extends HttpException {
660 const RedirectException(String message,
661 List<RedirectInfo> this.redirects) : super(message);
662 final List<RedirectInfo> redirects;
663 }
664
665
666 class RedirectLimitExceeded extends RedirectException {
667 const RedirectLimitExceeded(List<RedirectInfo> redirects)
668 : super("Redirect limit exceeded", redirects);
669 }
670
671
672 class RedirectLoop extends RedirectException {
673 const RedirectLoop(List<RedirectInfo> redirects)
674 : super("Redirect loop detected", redirects);
675 }
OLDNEW
« no previous file with comments | « no previous file | runtime/bin/http_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698