Closed
Description
Package
dio
Version
5.0.0
Output of flutter doctor -v
[✓] Flutter (Channel stable, 3.7.6, on macOS 12.5.1 21G83 darwin-x64, locale de-DE)
• Flutter version 3.7.6 on channel stable at /Users/...
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 12cb4eb7a0 (9 days ago), 2023-03-01 10:29:26 -0800
• Engine revision ada363ee93
• Dart version 2.19.3
• DevTools version 2.20.1
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0-rc1)
• Android SDK at /Users/...
• Platform android-33, build-tools 34.0.0-rc1
• ANDROID_HOME = /Users/...
• Java binary at: /Users/...
• Java version OpenJDK Runtime Environment (build 17.0.5+0-17.0.5b653.25-9484017)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 14.2)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Build 14C18
• CocoaPods version 1.11.3
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[!] Android Studio
• Android Studio at /Users/...
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
✗ Unable to find bundled Java version.
• Try updating or re-installing Android Studio.
[✓] Android Studio
• Android Studio at /Users/...
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 17.0.5+0-17.0.5b653.25-9484017)
[!] Android Studio
• Android Studio at /Users/...
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
✗ Unable to find bundled Java version.
• Try updating or re-installing Android Studio.
[✓] IntelliJ IDEA Community Edition (version 2020.2.2)
• IntelliJ at /Users/...
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
[✓] VS Code (version 1.70.2)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension can be installed from:
🔨 https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter
[✓] Connected device (3 available)
• SM X200 (mobile) • R9YRC0DVQTK • android-arm64 • Android 13 (API 33)
• macOS (desktop) • macos • darwin-x64 • macOS 12.5.1 21G83 darwin-x64
• Chrome (web) • chrome • web-javascript • Google Chrome 111.0.5563.64
[✓] HTTP Host Availability
• All required HTTP hosts are available
! Doctor found issues in 2 categories.
Dart Version
2.19.3
Steps to Reproduce
Create default dio instance and attach a cookiemanager to it:
final dio = Dio();
dio.interceptors.add(CookieManager(CookieJar()));
//now just request a default response
final response = await dio.get('http://clients3.google.com/generate_204');
In the response you will see there is a empty cookie header attached:
*** Request ***
uri: http://clients3.google.com/generate_204
method: GET
responseType: ResponseType.json
followRedirects: true
persistentConnection: true
connectTimeout: null
sendTimeout: null
receiveTimeout: null
receiveDataWhenStatusError: true
extra: {}
headers:
cookie:
data:
null
Now imagine we have some interceptor to catch invalid session token (renew them) and then just proceed with the original request. But we can't because dio.fetch throws -> HttpException: Failed to parse header value []:
final dio = Dio();
dio.interceptors.add(CookieManager(CookieJar()));
//now just request a default response
final success = await dio.get('http://clients3.google.com/generate_204');
//fetch the request again:
final failed = await dio.fetch(response.requestOptions);
/*
*** DioError ***:
uri: http://clients3.google.com/generate_204
DioError [unknown]: null
Error: HttpException: Failed to parse header value []
package:dio/src/dio_mixin.dart 530:7 DioMixin.fetch.<fn>
===== asynchronous gap ===========================
dart:async Future.catchError
package:dio/src/dio_mixin.dart 523:8 DioMixin.fetch
test/main/api_provider_test.dart 146:33 main.<fn>
===== asynchronous gap ===========================
dart:async _CustomZone.registerUnaryCallback
test/main/api_provider_test.dart 145:22 main.<fn>
DioError [unknown]: null
Error: HttpException: Failed to parse header value []
*/
Expected Result
The response should be success on both methods.
Actual Result
We got an exception because the cookie header can't be parsed. In Dio Versions < 5.0.0 there are no problems with that.
Stacktrack:
*** DioError ***:
uri: http://clients3.google.com/generate_204
DioError [unknown]: null
Error: HttpException: Failed to parse header value []
package:dio/src/dio_mixin.dart 530:7 DioMixin.fetch.<fn>
===== asynchronous gap ===========================
dart:async Future.catchError
package:dio/src/dio_mixin.dart 523:8 DioMixin.fetch
test/main/api_provider_test.dart 146:33 main.<fn>
===== asynchronous gap ===========================
dart:async _CustomZone.registerUnaryCallback
test/main/api_provider_test.dart 145:22 main.<fn>
DioError [unknown]: null
Error: HttpException: Failed to parse header value []
#0 _Cookie._parseSetCookieValue (dart:_http/http_headers.dart:1054:7)
#1 new _Cookie.fromSetCookieValue (dart:_http/http_headers.dart:982:5)
#2 new Cookie.fromSetCookieValue (dart:_http:795:20)
#3 CookieManager.onRequest.<anonymous closure>.<anonymous closure> (package:dio_cookie_manager/src/cookie_mgr.dart:42:32)
#4 MappedListIterable.elementAt (dart:_internal/iterable.dart:415:31)
#5 ListIterator.moveNext (dart:_internal/iterable.dart:344:26)
#6 CookieManager.onRequest.<anonymous closure> (package:dio_cookie_manager/src/cookie_mgr.dart:40:28)
#7 StackZoneSpecification._registerUnaryCallback.<anonymous closure>.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:124:36)
#8 StackZoneSpecification._run (package:stack_trace/src/stack_zone_specification.dart:204:15)
#9 StackZoneSpecification._registerUnaryCallback.<anonymous closure> (package:stack_trace/src/stack_zone_specification.dart:124:24)
#10 _rootRunUnary (dart:async/zone.dart:1406:47)
#11 _CustomZone.runUnary (dart:async/zone.dart:1307:19)
<asynchronous suspension>