Flutter进行HTTP请求并保存登陆状态(dio)

您所在的位置:网站首页 dio承情头 Flutter进行HTTP请求并保存登陆状态(dio)

Flutter进行HTTP请求并保存登陆状态(dio)

2024-01-21 03:38| 来源: 网络整理| 查看: 265

hello, I'm Shendi 记录一下

文章目录 引入库使用指定超时时间设置请求头保留登录凭证(Session)响应

引入库

使用到了 dio 于是要在 pubspec.yaml 中引入

dependencies: # 我这里使用的版本是 4.0.1,可根据自己需求选择 dio: ^4.0.1

在需要使用的地方导入

import 'package:dio/dio.dart'; 使用

dio的github: https://github.com/flutterchina/dio

官方简单的案例

import 'package:dio/dio.dart'; void getHttp() async { try { var response = await Dio().get('http://www.google.com'); print(response); } catch (e) { print(e); } } 所有 http 操作都需要在 async 修饰的函数内执行(异步) // 首先可以定义一个 dio 对象 var dio = Dio(); // 取消重定向 dio.options.followRedirects = false; // 当响应状态不为200时,会拿不到响应数据,于是要先进行设置 dio.options.validateStatus = (status) { return status! "参数1":"值", "参数2", "值"}); // 或 var data = FormData.fromMap({ "参数1": "值", "参数2": "值", }); resp = await dio.post("url", data: data); } 指定超时时间

一般都需要设置请求的超时时间

// 其中seconds是秒 await dio.post("").timeout(const Duration(seconds: 3)) 设置请求头 var dio = Dio(); dio.options.headers["请求头键名称"] = "值";

更多请求设置可以直接看文档 https://github.com/flutterchina/dio#request-options

保留登录凭证(Session)

当使用到了 Session ,例如登录后才可执行其他操作,则需要手动设置 session

Session 在 http 请求的 cookie 中,根据不同服务器, Session的名称不同,例如Tomcat的为 (JSESSIONID)

一般首先需要登录,当我们第一次请求服务器时,此时没有session则,响应头会携带 set-cookie,set-cookie中的内容需要保存下来,在下次请求的时候带上此Cookie则可以保存状态了

例如请求登录接口

var cookie; var dio = Dio(); login() async { dio.options.followRedirects = false; dio.options.validateStatus = (status) { return status! /// Response body. may have been transformed, please refer to [ResponseType]. // 响应数据 T? data; /// Response headers. 响应头 Headers headers; /// The corresponding request info. Options request; /// Http status code. 响应状态码 int? statusCode; String? statusMessage; /// Whether redirect bool? isRedirect; /// redirect info List redirects ; /// Returns the final real request uri (maybe redirect). Uri realUri; /// Custom field that you can retrieve it later in `then`. Map extra; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3