乐闻世界logo
搜索文章和话题

How do I make an http request using cookies on flutter?

4 个月前提问
3 个月前修改
浏览次数72

1个答案

1

在Flutter中,要携带cookies发起HTTP请求,通常需要使用http包,并结合cookie_jar来管理cookies。您可以通过以下步骤实现:

  1. 添加依赖:首先,需确保您的pubspec.yaml文件中包含了httpcookie_jar这两个依赖。
yaml
dependencies: flutter: sdk: flutter http: ^0.13.3 cookie_jar: ^3.0.1
  1. 管理Cookies:使用cookie_jar包中的CookieJar类来管理cookies。

  2. 携带Cookies发起请求:在发起请求前,将需要携带的cookies添加到请求的headers中。

以下是具体的代码实现例子:

dart
import 'package:http/http.dart' as http; import 'package:cookie_jar/cookie_jar.dart'; // 创建一个CookieJar实例来管理cookies final cookieJar = CookieJar(); Future<void> fetchResource(String url) async { // 获取之前保存的cookies List<Cookie> cookies = await cookieJar.loadForRequest(Uri.parse(url)); // 将cookies转换为header格式 String cookieHeader = cookies.map((cookie) => '${cookie.name}=${cookie.value}').join('; '); // 发起http请求,携带cookies final response = await http.get( Uri.parse(url), // 将cookies作为headers携带 headers: { 'Cookie': cookieHeader, }, ); // 如果有Set-Cookie头,更新cookieJar中的cookies if (response.headers['set-cookie'] != null) { var setCookies = response.headers['set-cookie']!; cookieJar.saveFromResponse(Uri.parse(url), [Cookie.fromSetCookieValue(setCookies)]); } // 处理响应... }

在上述例子中,我们首先通过cookieJar.loadForRequest方法获取所有与指定URL关联的cookies。然后,我们将这些cookies格式化为一个字符串,这个字符串符合HTTP headers中Cookie字段的格式。随后,在发起HTTP请求时,我们将这个字符串添加到请求的headers中。

在收到服务器响应后,如果响应中包含Set-Cookie头,我们更新cookieJar中的cookies,这样后续的请求就可以使用最新的cookies了。

需要注意的是,由于Flutter的HTTP库不会自动管理cookies,所以每次请求都需要手动设置Cookie头,并且在请求后更新cookieJar。这样才能保证cookies的持久性和有效性。

2024年6月29日 12:07 回复

你的答案