【问题标题】:How to make HTTP request in Dart with params and header (Uri)如何在 Dart 中使用参数和标头 (Uri) 发出 HTTP 请求
【发布时间】:2020-04-08 06:56:43
【问题描述】:

我是 Flutter 的新手。我想从网站https://rapidapi.com/ 获取来自 API 的请求。请帮我将 Python 翻译成 Dart。

我可以使用链接 https://covid-19-data.p.rapidapi.com/totals 代替 uri 来获取总数据,但无法通过传递国家/地区名称来获取国家/地区数据。

这是一个 Python 代码,我想要在 Dart(Flutter) 中使用它

import requests

url = "https://covid-19-data.p.rapidapi.com/country"

querystring = {"format":"undefined","name":"italy"}

headers = {
    'x-rapidapi-host': "covid-19-data.p.rapidapi.com",
    'x-rapidapi-key': "84768ddbd5mshe582f65a69666d5p1fea75jsn3a2b9202cc14"
    }

response = requests.request("GET", url, headers=headers, params=querystring)

print(response.text)

这就是我在 Dart 中所做的。我得到错误

{"type":"https:\/\/tools.ietf.org\/html\/rfc2616#section-10","title":"An error occurred","detail":"Parameter name is missing"}

状态码是 400。

import 'package:flutter/cupertino.dart';
import 'package:http/http.dart' as http;

class NetworkingBrain {
  NetworkingBrain({@required this.params});

  final params;

  Future<void> getData() async {
    try {
      var value = {'country1': params};
      var uri = Uri.parse('https://covid-19-data.p.rapidapi.com/country')
          .replace(queryParameters: value)
          .toString();

      http.Response response = await http.get(uri, headers: {
        'x-rapidapi-host': "covid-19-data.p.rapidapi.com",
        'x-rapidapi-key': "84768ddbd5mshe582f65a69666d5p1fea75jsn3a2b9202cc14"
      });
      print(response.body);
      print(response.statusCode);
    } catch (e) {
      print(e);
    }
  }
}

请帮帮我。

【问题讨论】:

    标签: python-3.x http flutter dart


    【解决方案1】:

    您传递了错误的参数。

    name 传递为key

    如下:

       var value = {'name': params};
    

    而不是

      var value = {'country1': params};
    

    【讨论】:

      【解决方案2】:

      您需要在收到响应后解码 json 文件。尝试使用以下代码。

      Map data;
      List userData;
      http.Response response = await http.get(uri, headers: {
          'x-rapidapi-host': "covid-19-data.p.rapidapi.com",
          'x-rapidapi-key': "84768ddbd5mshe582f65a69666d5p1fea75jsn3a2b9202cc14"
        });
      data = json.decode(response.body);
      setState(() {
        userData = data['tag of json file'];
      
      });
      
      }
      

      【讨论】:

      • 我按照你说的做了。我收到了这个新错误{type: https://tools.ietf.org/html/rfc2616#section-10, title: An error occurred, detail: Parameter name is missing}
      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多