Dart Uri Api - 请求通过将 HTML 代码提供给问号来更改链接

Posted

技术标签:

【中文标题】Dart Uri Api - 请求通过将 HTML 代码提供给问号来更改链接【英文标题】:Dart Uri Api - The request changed the link by giving the HTML code to the question mark 【发布时间】:2021-07-30 18:15:19 【问题描述】:

我想从 API 获取一些数据,链接包含问号,使用 Uri 的请求更改了链接,因此无法访问我的链接。

Uri url = Uri.https('api.aladhan.com',
    'v1/calendar?latitude=45.53157194849857&longitude=9.13990990079155&method=2&month=5&year=2021');
Future<MonthPrayers> fetchAlbum() async 
  final response = await http.get(url);

  if (response.statusCode == 200) 
    return MonthPrayers.fromJson(jsonDecode(response.body));
   else 
    print("Uri : " + url.toString());
    throw Exception('Failed to load album');
  

打印结果:

Uri : https://api.aladhan.com/v1/calendar%3Flatitude=45.53157194849857&amp;longitude=9.13990990079155&amp;method=2&amp;month=5&amp;year=2021

?%3F

所以请求加载数据失败

Results

【问题讨论】:

【参考方案1】:

构建查询地图

 Map<String, dynamic> params = 
     'latitude': 45.53157194849857,
     'longitude': 9.13990990079155,
     'method': 2,
     'month': 5,
     'year': 2021,
    ;

var url = Uri.https('api.aladhan.com', 'v1/calendar', params);
//..

【讨论】:

谢谢,但仍然报错,下面的解决方案有效,再次感谢【参考方案2】:

只需使用Uri.parse 而不是Uri.https。它更简单,更不容易出错。

Uri url = Uri.parse('https://api.aladhan.com/v1/calendar?latitude=45.53157194849857&longitude=9.13990990079155&method=2&month=5&year=2021');

【讨论】:

以上是关于Dart Uri Api - 请求通过将 HTML 代码提供给问号来更改链接的主要内容,如果未能解决你的问题,请参考以下文章

使用 dart 创建发布请求,将信息作为 json 数据通过请求正文传递

Flutter/Dart Uri 没有在 URL 中转义冒号“:”

错误:无法将参数类型“String”分配给参数类型“Uri”。 'Uri'来自'dart:core' [重复]

Dart - 发送列表形式的 GET 参数

通过“HttpUtility.UrlEncode”和“Uri.EscapeDataString”在 GET API 请求中编码撇号会出错

Uri'来自'dart:core' [重复]