如何使用 Dio 或 http 在 Flutter 中通过 GET 请求发送参数

Posted

技术标签:

【中文标题】如何使用 Dio 或 http 在 Flutter 中通过 GET 请求发送参数【英文标题】:How to send parameters with GET request in Flutter using Dio or http 【发布时间】:2020-11-29 03:46:21 【问题描述】:

我正在尝试使用一些参数向后端服务器发送 GET 请求,但我收到了错误:

DioError [DioErrorType.RESPONSE]: Http status error [500]

我发送的参数也包含一个布尔值和一个双精度值。我怎样才能成功提出这个请求。我在 SO 上尝试了很多答案,但没有一个对我有用。 下面是我的代码sn-p

Future<Converter> currencyConverter() async 
    String convertURL = baseURL + 'convert/currency/';

    String auth = await localpref.getString('access');

  //  FormData formData = new FormData.fromMap(
  //    "switch": _switch,
 //     "s_currency": senderCurrencyVal,
//      "r_currency": recieverCurrencyVal,
 //     "amount": amount
 //   );

    Map<String, dynamic> payload = 
      "switch": _switch, //boool
      "s_currency": senderCurrencyVal, // string
      "r_currency": recieverCurrencyVal, // string
      "amount": amount  //double
    ;
    try 
      var res = await dio.get(convertURL,
          //data: formData,
          queryParameters: payload,
          options: Options(
              followRedirects: false,
              validateStatus: (status) 
                return status < 500;
              ,
              headers: 
                "accept": "*/*",
                "Authorization": "Bearer $auth",
            "Content-Type": "application/x-www-form-urlencoded"
              ));

      if (res.statusCode >= 200 && res.statusCode <= 250) 
        print("Transfer Succeed");
        var respBody = res.data;

        Converter converter = converterFromJson(res.data);
        print(converter.result);
        return converter;
       else 
        print(res);
        print("Else not successful");
      
     catch (e) 
      print(e);
    

  

注意:我不负责后端,我知道它是用 Django 开发的。我也尝试过 dio.get 和 dio.request 但我得到了相同的结果,使用 Dio 时 formdata 不能与 GET 一起使用。

这个请求在邮递员中运行良好。

感谢您的帮助。 问候

【问题讨论】:

你试过用相同的参数在邮递员中点击相同的网址吗?它在那里按预期工作吗? 是的,在邮递员中一切正常 代码看起来不错。这是您项目中唯一无法正常工作的请求吗? 是的,我的帖子和补丁工作正常,即使没有参数也工作正常 【参考方案1】:

看看这个how to fix it Data not showing in list in flutter。

我直接使用 http 进行任何获取。同时查看https://app.quicktype.io/ 以快速创建解码器类。要使用它,请在此处复制邮递员的响应,它将在 Dart 中为您生成一个类。

【讨论】:

我最初创建了一个类,但它总是调用 NULL,因为 api 调用不返回任何内容 同时检查 url...当你使用 concat 时,可能会有 / 丢失 .. 我已经做到了,实际上 URL 没有参数也可以正常工作,当我添加参数时,我遇到了这个问题 能否分享完整链接和示例字段,我可以尝试运行它 等待...要发送数据以接收响应,您必须使用 http 中的 post()

以上是关于如何使用 Dio 或 http 在 Flutter 中通过 GET 请求发送参数的主要内容,如果未能解决你的问题,请参考以下文章

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

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

如何使用 Dio 在 Flutter 中调用 API?

Flutter Dio源码分析--Dio介绍

Flutter学习日记之Http&Dio网络请求的使用与封装

如何使用 dio 从本地主机:3000 切换到准备在 Flutter 中生产的东西?