提问人:Andy32 提问时间:11/16/2023 最后编辑:Andy32 更新时间:11/16/2023 访问量:35
如何使用 flutter web 正确地获得 cookie 的响应?
How do you properly get a response with cookies using flutter web?
问:
我已经习惯了从 Flutter Mobile 切换到 Web。 从未在移动设备上与 cookie 互动过,现在这样做让我感到不安。
每当我尝试测试来自随机网站的响应时,看看我是否可以获得他们的 cookie,我都会从响应中获得除 cookie(又名“set-cookie”值)之外的所有内容。
这是我使用的 fetch 的一个片段: 函数
但我只得到以下响应: 调试器中的响应
我正在使用我发现的一个随机网站来测试它(“https://catfact.ninja/fact”),我不确定这是否重要。
如果我做错了什么,是否有任何指南或东西可以设置 android studio 以获取 cookie 或其他东西?
已经尝试使用 dart:html、dart:http、package:http 和 dart:io 包。
编辑:
这是主屏幕:
import 'package:flutter/material.dart';
import '../../data/repository/cookie_repository.dart';
import '../../domain/repository/interface/i_cookie_repository.dart';
class MainScreen extends StatefulWidget {
const MainScreen({super.key});
@override
State<StatefulWidget> createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
final ICookieRepository cookieRepository = CookieRepository();
@override
void initState() {
super.initState();
}
Future<List<String>> getUiData() async {
final List<String> cookies = await cookieRepository.getCookies();
return cookies;
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black54,
body: SafeArea(
child: FutureBuilder<List<String>>(
future: getUiData(),
builder: (
BuildContext context,
AsyncSnapshot<List<String>> snapshot,
) {
//debugPrint("MAINSCREEN 1st SNAPSHOT: $snapshot");
if (snapshot.connectionState == ConnectionState.waiting) {
return const CircularProgressIndicator();
} else if (snapshot.hasError) {
//debugPrint("MAINSCREEN HAS ERROR: $snapshot");
return const Text("HAS ERROR");
} else if (snapshot.hasData) {
//debugPrint("MAINSCREEN HAS DATA: $snapshot");
return ListView.builder(
itemCount: snapshot.data?.length,
itemBuilder: (
BuildContext context,
int index,
) {
final payload = snapshot.data![index];
return Card(
child: Text(payload),
);
},
);
} else if (!snapshot.hasData) {
return const Text("IS EMPTY");
} else {
return const Text("OTHER ERROR");
}
},
),
),
);
}
}
这是我得到响应的数据存储库:
import 'package:flutter/foundation.dart';
import 'package:http/http.dart';
import '../../domain/repository/interface/i_cookie_repository.dart';
class CookieRepository extends ICookieRepository {
List<String> parsedCookieList = [];
final String cookieUrl = "https://catfact.ninja/fact";
@override
Future<List<String>> getCookies() async {
if (parsedCookieList.isEmpty) {
fetchDataFromCookieOld();
final cookie = await fetchDataFromCookie() ?? "";
parsedCookieList = [cookie] ?? [];
}
return parsedCookieList;
}
Future<void> fetchDataFromCookieOld() async {
final response = await Client().get(
Uri.parse('https://catfact.ninja/fact'),
);
response.headers.forEach((key, value) => debugPrint('$key: $value'));
}
考虑到代码没有被清理,所以它看起来很可怕。
答: 暂无答案
评论
set-cookie