如何在Dart中持久化cookie ?



我正在制作一个应用程序在扑动,我需要发送一个cookie的头部访问我的web API。

然而,我没有任何成功。

这是我的代码。我怎样才能让一块飘动的饼干长久存在?
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:shared_preferences/shared_preferences.dart';
class XsrfToken {
static Future<String> getXsrf(String getJwt) async {
var url = 'https://www.myservice.com/api/v1/api.php';
var decode = json.decode(getJwt);
var header = {"Content-Type": "application/json"};
Map params = {"token": decode};
var _body = json.encode(params);
var response = await http.post(url, headers: header, body: _body);
print('Responde status ${response.statusCode}');
print('Responde body ${response.body}');
var xsrf = response.body;
var prefs = await SharedPreferences.getInstance();
prefs.setString("TokenXSRF", xsrf);
return xsrf;
}
}

为侦听器添加cookie。

var cookie1 = 'xyz';
var cookie2 = 'abc';
var headers =  {
"Content-Type": "application/json",
'Cookie': 'myCookie1=$cookie1; mycookie2=$cookie2',
};

用于检索cookie

var cookiesData = response.headers['set-cookie'];
if (cookiesData != null) {
Map _cookies = _formatCookies(cookiesData);
// Do your logic
}

你将得到一个长字符串。

以下是我个人使用的 格式
Map _formatCookies(String cookiesData) {
Map cookies = {};
if (cookiesData.contains('cookie1')) {
List at = RegExp(r'(cookie1)(.*?)[^;]+').stringMatch(cookiesData).split('=');
cookies['cookie1'] = at[1];
}
if (cookiesData.contains('cookie2')) {
List rt = RegExp(r'(cookie2)(.*?)[^;]+').stringMatch(cookiesData).split('='); 
cookies['cookie2'] = rt[1];
}
return cookies;
}

String session = response.headers['set-cookie'].toString().split(";").first.split('=').last;

最新更新