使用cookie_jar包,官方例子https://github.com/flutterchina/cookie_jar
import 'package:dio/dio.dart';
import 'package:dio_cookie_manager/dio_cookie_manager.dart';
import 'package:cookie_jar/cookie_jar.dart';
main() async {
var dio = Dio();
var cookieJar=CookieJar();
dio.interceptors.add(CookieManager(cookieJar));
await dio.get("https://baidu.com/");
// Print cookies
print(cookieJar.loadForRequest(Uri.parse("https://baidu.com/")));
// second request with the cookie
await dio.get("https://baidu.com/");
}
具体使用
var _dio = Dio();
var cookieJar = CookieJar();
@override
void initState() {
super.initState();
_dio.interceptors.add(CookieManager(cookieJar));
}
// 然后每次使用直接正常的使用即可,默认带上cookie
// 先get验证码图片
_dioGetCaptchaImage() async {
var url = BaseUrl.url + '/captcha/captchaImage?type=math';
try {
await _dio.get(url);
} catch(e) {
print(e.toString());
}
}
// 获取验证码的结果, 请求验证码需要带上cookie
Future<String> _dioGetCaptchaImageCode() async {
var url = BaseUrl.url + '/captcha/captchaImage_code';
try {
var response = await _dio.get(url);
return response.toString();
} catch(e) {
print(e.toString());
}
return "";
}
// 进行登入操作,需要传入用户名及其密码
Future<Map> _getCheck(String username, String password) async {
await _dioGetCaptchaImage();
String code = await _dioGetCaptchaImageCode();
var url = BaseUrl.url + '/login';
try {
FormData formData = new FormData.from({
"username": username,
"password": password,
"validateCode": code,
});
var response = await _dio.post(url, data: formData);//2
Map<String, dynamic> map = json.decode(response.toString());
print(map.toString());
} catch (e) {
print(e.toString());
}
return null;
}