plugins/cookie_manager/README.md
A cookie manager combines cookie_jar and dio, based on the interceptor algorithm.
Add the dio_cookie_manager package to your
pubspec dependencies.
import 'package:cookie_jar/cookie_jar.dart';
import 'package:dio/dio.dart';
import 'package:dio_cookie_manager/dio_cookie_manager.dart';
void main() async {
final dio = Dio();
final cookieJar = CookieJar();
dio.interceptors.add(CookieManager(cookieJar));
// First request, and save cookies (CookieManager do it).
await dio.get("https://dart.dev");
// Print cookies
print(await cookieJar.loadForRequest(Uri.parse("https://dart.dev")));
// Second request with the cookies
await dio.get('https://dart.dev');
}
CookieManagerCookieManager is an interceptor that can help you to manage cookies automatically.
CookieManager depends on the cookie_jar package:
The dio_cookie_manager manage API is based on the cookie_jar.
CookieJar manages cookies automatically, and it's memory-based.
If you want to persist cookies, you can use the PersistCookieJar class,
PersistCookieJar persists the cookies in local files,
the cookies always exist unless delete is called explicitly.
[!NOTE] The path for
PersistCookieJarmust be existed on devices and with write access when running in Flutter. Use path_provider package to get a valid path.
In Flutter:
import 'package:cookie_jar/cookie_jar.dart';
import 'package:dio/dio.dart';
import 'package:dio_cookie_manager/dio_cookie_manager.dart';
import 'package:path/path' as path;
Future<void> prepareCookieManager() async {
final directory = await getApplicationDocumentsDirectory();
final cookieJar = PersistCookieJar(
ignoreExpires: true,
storage: FileStorage(path.join(directory.path, "/.cookies/")),
);
dio.interceptors.add(CookieManager(cookieJar));
}
Redirect requests require extra configuration to parse cookies correctly. In shortly:
followRedirects to false.statusCode from 300 to 399 responses predicated as succeed.HttpHeaders.locationHeader.For example:
void main() async {
final cookieJar = CookieJar();
final dio = Dio()
..interceptors.add(CookieManager(cookieJar))
..options.followRedirects = false
..options.validateStatus =
(status) => status != null && status >= 200 && status < 400;
final redirected = await dio.get('/redirection');
final response = await dio.get(
redirected.headers.value(HttpHeaders.locationHeader)!,
);
}
By default, the CookieManager will throw an error when parsing invalid cookies.
You can enable the ignoreInvalidCookies option to ignore them instead.
final cookieManager = CookieManager(cookieJar, ignoreInvalidCookies: true);
// Or update it later.
cookieManager.ignoreInvalidCookies = true;