首页 > 解决方案 > 使用 Dio 从 Flutter Web 发出 HTTP 请求时,正文和标头消失

问题描述

一段时间以来,我一直在使用dio包作为 Flutter mobile 上的http的替代品,并且它一直运行良好。然而,当我在颤振网络上尝试它时,它并没有按预期工作。

在服务器端查看请求时,正文完全是空的,我添加的标头参数也没有了。使用 post 和 get 的问题是相同的。

发送请求的代码如下所示:

final dio = Dio();

dio.interceptors.add(
  InterceptorsWrapper(
    onRequest: (RequestOptions options, RequestInterceptorHandler handler) {
      if (options.path != 'login')
        options.headers.addAll({
          'authorization': jwt,
        });
      options.baseUrl = 'http://192.168.1.168:8080/';
      options.responseType = ResponseType.json;
      return handler.next(options);
    },
    onError: (DioError error, ErrorInterceptorHandler handler) {
      maybeRefreshToken(error, handler, refreshToken);
    },
  ),
);

Future login(String email, String password) async {
  try {
    final response = await dio.post(
      'login',
      data: {
        'email': email,
        'password': password,
      },
    );
    Tokens tokens = Tokens.fromJson(response.data);
    jwt = tokens.token;
    refreshJwt = tokens.refreshToken;
  } catch (error) {
    throw parseError(error);
  }
}

我曾尝试使用 http 包发出相同的请求并且有效,因此我很确定问题与 Dio 有关。

标签: flutterdartdio

解决方案


推荐阅读