我正试着用带有DIO个包裹的express 发送post个请求.

以下是请求:

getSessionId() async {

  var csrf = await getCsrftoken();

  var dio = new Dio(new Options(
      baseUrl: "http://xxxxxxx/accounts/login/",
      connectTimeout: 5000,
      receiveTimeout: 100000,
      // 5s
      headers: {
        'Cookie': "csrftoken=" + csrf
      },
      contentType: ContentType.JSON,
      // Transform the response data to a String encoded with UTF8.
      // The default value is [ResponseType.JSON].
      responseType: ResponseType.PLAIN
  ));

  var response;
  response = await dio.post("http://xxxxxxx/accounts/login/",
    data: {
      "username": "xxxxx",
      "password": "xxxxx",
      "csrfmiddlewaretoken" : csrf
    },
    options: new Options(
        contentType: ContentType.parse("application/x-www-form-urlencoded")),
  );

  print("StatusCode: ");
  print(response.statusCode);
  print("Response cookie: ");   //THESE ARE NOT PRINTED
  print(response.headers);
}

在请求之后,我收到了:

E/flutter ( 4567): [ERROR:flutter/shell/common/shell.cc(181)] Dart Error: Unhandled exception:
    E/flutter ( 4567): DioError [DioErrorType.RESPONSE]: Http status error [302]
    E/flutter ( 4567): #0      getSessionId (file:///C:/get_order/lib/main.dart:36:14)
    E/flutter ( 4567): <asynchronous suspension>

从这个请求中,我只需要获取sessionid个Cookie,但是函数会因未处理的异常而停止.

推荐答案

我这样解决:

在请求中添加followRedirects: falsevalidateStatus: (status) { return status < 500;}.这样地:

var response = await Dio().post("http://myurl",
    data: requestBody,
    options: Options(
        followRedirects: false,
        validateStatus: (status) { return status < 500; }
    ),
);

通过这种方式,你可以每headers年从302中获得一次.

Dart相关问答推荐

如何在流侦听器中对异步函数调用进行单元测试

Dart 中 ThemeData 类的 copyWith() 方法

如何在polymer应用程序中实现主要功能

ListView 不会刷新,而附加列表会刷新 (Flutter)

将Card添加到 ListView

在Flutter中通过 Function(T) 传递泛型类型

Flutter drawArc() 方法绘制完整的圆而不仅仅是圆弧

Flutter | Dart:URI的目标不存在

如何使用我的 dart 包私有而不在 pub dart lang 上显示?

参数类型Map Function()不能分配给参数类型Map

如何使 FadeInImage 循环?

Dart:默认 gitignore?

在 Flutter 的 TextFormField 中管理事件

Flutter:如何获取assets目录中所有图像的名称列表?

GestureDetector onTap 卡

什么时候在 Dart 中使用 num

如何缩小从 Dart 编辑器编译的 JavaScript 代码?

Dart vs Haxe - Current state, hype, usability, ...?

可以在 Dart 中的抽象类中声明静态方法吗?

Dart中var和dynamic类型的区别?