From 879a81062c9fb7aab2e79bbc1d05c0615af0654f Mon Sep 17 00:00:00 2001 From: duwen Date: Tue, 5 Mar 2019 16:30:56 +0800 Subject: [PATCH] support maxRedirects config --- package_src/lib/src/adapter.dart | 2 ++ package_src/lib/src/dio.dart | 1 + package_src/lib/src/options.dart | 20 ++++++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/package_src/lib/src/adapter.dart b/package_src/lib/src/adapter.dart index e95290d9f..88c8043ba 100644 --- a/package_src/lib/src/adapter.dart +++ b/package_src/lib/src/adapter.dart @@ -106,7 +106,9 @@ class DefaultHttpClientAdapter extends HttpClientAdapter { type: DioErrorType.CONNECT_TIMEOUT, ); } + request.followRedirects = options.followRedirects; + request.maxRedirects=options.maxRedirects; if (options.method != "GET" && requestStream != null) { // Transform the request data diff --git a/package_src/lib/src/dio.dart b/package_src/lib/src/dio.dart index 16b029969..967f29a09 100644 --- a/package_src/lib/src/dio.dart +++ b/package_src/lib/src/dio.dart @@ -937,6 +937,7 @@ class Dio { options.validateStatus ?? (int status) => status >= 200 && status < 300 || status == 304, followRedirects: opt.followRedirects ?? options.followRedirects ?? true, + maxRedirects: opt.maxRedirects ?? options.maxRedirects ?? 5, queryParameters: query, cookies: List.from(options.cookies ?? [])..addAll(opt.cookies ?? []), ); diff --git a/package_src/lib/src/options.dart b/package_src/lib/src/options.dart index 2b1b4b516..922b89309 100644 --- a/package_src/lib/src/options.dart +++ b/package_src/lib/src/options.dart @@ -38,6 +38,7 @@ class BaseOptions extends _RequestConfig { ValidateStatus validateStatus, bool receiveDataWhenStatusError = true, bool followRedirects = true, + int maxRedirects = 5, }) : super( method: method, connectTimeout: connectTimeout, @@ -50,6 +51,7 @@ class BaseOptions extends _RequestConfig { receiveDataWhenStatusError: receiveDataWhenStatusError, followRedirects: followRedirects, cookies: cookies, + maxRedirects: maxRedirects, ); /// Create a new Option from current instance with merging attributes. @@ -67,6 +69,7 @@ class BaseOptions extends _RequestConfig { ValidateStatus validateStatus, bool receiveDataWhenStatusError, bool followRedirects, + int maxRedirects, }) { return new BaseOptions( method: method ?? this.method, @@ -81,6 +84,7 @@ class BaseOptions extends _RequestConfig { receiveDataWhenStatusError: receiveDataWhenStatusError ?? this.receiveDataWhenStatusError, followRedirects: followRedirects ?? this.followRedirects, + maxRedirects: maxRedirects ?? this.maxRedirects, ); } @@ -107,6 +111,7 @@ class Options extends _RequestConfig { ValidateStatus validateStatus, bool receiveDataWhenStatusError, bool followRedirects, + int maxRedirects, }) : super( method: method, connectTimeout: connectTimeout, @@ -119,6 +124,7 @@ class Options extends _RequestConfig { receiveDataWhenStatusError: receiveDataWhenStatusError, followRedirects: followRedirects, cookies: cookies, + maxRedirects: maxRedirects, ); /// Create a new Option from current instance with merging attributes. @@ -135,6 +141,7 @@ class Options extends _RequestConfig { ValidateStatus validateStatus, bool receiveDataWhenStatusError, bool followRedirects, + int maxRedirects, }) { return new Options( method: method ?? this.method, @@ -149,6 +156,7 @@ class Options extends _RequestConfig { receiveDataWhenStatusError: receiveDataWhenStatusError ?? this.receiveDataWhenStatusError, followRedirects: followRedirects ?? this.followRedirects, + maxRedirects: maxRedirects ?? this.maxRedirects, ); } } @@ -172,6 +180,7 @@ class RequestOptions extends Options { ValidateStatus validateStatus, bool receiveDataWhenStatusError = true, bool followRedirects = true, + int maxRedirects, }) : super( method: method, connectTimeout: connectTimeout, @@ -184,6 +193,7 @@ class RequestOptions extends Options { validateStatus: validateStatus, receiveDataWhenStatusError: receiveDataWhenStatusError, followRedirects: followRedirects, + maxRedirects: maxRedirects, ); /// generate uri @@ -236,6 +246,7 @@ class _RequestConfig { this.cookies, this.receiveDataWhenStatusError = true, this.followRedirects = true, + this.maxRedirects = 5, }) : this.headers = headers ?? {}, this.extra = extra ?? {}; @@ -289,6 +300,15 @@ class _RequestConfig { /// see [HttpClientRequest.followRedirects] bool followRedirects; + /** + * Set this property to the maximum number of redirects to follow + * when [followRedirects] is `true`. If this number is exceeded + * an error event will be added with a [RedirectException]. + * + * The default value is 5. + */ + int maxRedirects; + /// Custom Cookies for every request List cookies; }