Flutter进行HTTP请求并保存登陆状态(dio)
Posted HackShendi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter进行HTTP请求并保存登陆状态(dio)相关的知识,希望对你有一定的参考价值。
hello, I'm Shendi
记录一下
引入库
使用到了 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! < 500;
;
// 发送http请求,首先需要确保函数是 async 的
login() async
// 发送 get 请求, get请求的参数接在url后面, 返回一个响应对象
Response resp = await dio.get("url?参数1=值&参数2=值");
// 发送 post 请求,post 请求的参数需要格外设置
resp = await dio.post("url", data: "参数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! < 500;
;
// 在其他请求加上这一行就可以
if (cookie != null) dio.options.headers["Cookie"] = loginData.cookie;
Response resp = await dio.get('接口地址').timeout(const Duration(seconds: 3));
// 如果有 set-cookie 则保存下来
if (resp.headers["set-cookie"] != null)
cookie = resp.headers["set-cookie"].toString();
cookie = cookie.substring(1, cookie.length - 1);
响应
/// 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<RedirectInfo> redirects ;
/// Returns the final real request uri (maybe redirect).
Uri realUri;
/// Custom field that you can retrieve it later in `then`.
Map<String, dynamic> extra;
以上是关于Flutter进行HTTP请求并保存登陆状态(dio)的主要内容,如果未能解决你的问题,请参考以下文章