解决flutter dio请求头的cookie(session,token)加不上去的问题

cookie,session,token这三兄弟真令人头大,安卓里面是,flutter也一样。
但好在dio有定义好的cookie管理库

dio.interceptors.add(CookieManager(CookieJar()));

但是你知道的,有的后台cookie不知道会给你放在哪····而且要是用session和token就没办法了,这次遇到的问题是在 options的cookie属性里面加,并没有显示,最后只能加上拦截器,具体原因不明。直接上我网络请求的部分代码吧。

 HttpUtil() {
    //BaseOptions、Options、RequestOptions 都可以配置参数,优先级别依次递增,且可以根据优先级别覆盖参数
    options = new BaseOptions(
      //请求基地址,可以包含子路径
      baseUrl: Api.BaseUrl,
      //连接服务器超时时间,单位是毫秒.
      connectTimeout: 10000,
      //响应流上前后两次接受到数据的间隔,单位为毫秒。
      receiveTimeout: 5000,
      //Http请求头.
      headers: {
        //do something
        "version": "1.0.0",
        "jsid":"qz"
      },
      //直接加cookie没有用
cookies: [Cookie("vue_admin_template_token",Global.profile.token!=null?Global.profile.token:"1111")],
      //请求的Content-Type,默认值是[ContentType.json]. 也可以用ContentType.parse("application/x-www-form-urlencoded")
      contentType: ContentType.json,
      //表示期望以那种格式(方式)接受响应数据。接受三种类型 `json`, `stream`, `plain`, `bytes`. 默认值是 `json`,
      responseType: ResponseType.json,
    );

    dio = new Dio(options);

    (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) {
      // config the http client
      client.findProxy = (uri) {
        //proxy all request to localhost:8888
        return "";
      };
      // you can also create a new HttpClient to dio
      // return new HttpClient();
    };

    //Cookie管理,没有持久化保存,重开一次app就会重新去获取
//    dio.interceptors.add(CookieManager(CookieJar()));

    //添加拦截器
    dio.interceptors
        .add(InterceptorsWrapper(onRequest: (RequestOptions options) {
          var op = options;
          if(op.path.contains("login") || op.path.contains("verifyCode")){

          }else{
            op.headers.addAll({
              "Authorization":"Bearer " + (Global.profile.token!=null?Global.profile.token:"1111")
            });
            options.headers[HttpHeaders.cookieHeader] = "vue_admin_template_token=${(Global.profile.token != null ? Global.profile.token : '1111')}";
          }

      print("请求之前"+op.cookies.toString());
      return op; //continue
    }, onResponse: (Response response) {
      print("响应之前");
      // Do something with response data
      if(response.headers.toString().contains("JSESSIONID")){

        print(response.headers);
      }


      return response; // continue
    }, onError: (DioError e) {
      print("错误之前");
      // Do something with response error

      return e; //continue
    }));
  }

简单说明一下Global是持久化保存数据的文件,flutter中文网上有详细的说明,请自行查看。这个也不太完整只有添加cookie,没有刷新cookie的操作,仅供参考。保存cookie是放在获取cookie接口的返回里面进行操作。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值