http url参数无效的字符错误

我使用feathers.js(https://feathersjs.com/)开发了一个REST API。
当试图使用package在http:http.dart中执行一个http“读取”请求时,我遇到了一个错误。 http.dart库无法正确解析我传递给uri的查询参数。

我通过Android Studio调试控制台收到的错误是;

FormatException:无效字符(在字符84处)E / flutter(11338):... lk.com/weatherobs?last=true&location[$in]=Bellambi&location[$in]=Nowra ....

该错误表示方括号和可能的$符号('[$ in]')是问题。

_getDemoRequest() {
  String url = r"http://demoapi.ap-southeast-2.elasticbeanstalk.com/weatherobs?last=true&location[$in]=Bellambi&location[$in]=Nowra&location[$in]=Sydney Airport&location[$in]=Thredbo Top Station&location[$in]=Hobart&location[$in]=Coolangatta";
  http.read(url).then(print);    
}

在URL中,我曾尝试在字符串前加上和不加'r'作为原始字符串无效。

我也尝试使用httpClient与params没有成功和方括号完全相同的错误,例如'[$ in]'

  String httpbaseUri = "http://xxxx.ap-southeast-2.elasticbeanstalk.com";
  String qParams = r"?last=true&location[$in]=Bellambi&location[$in]=Nowra";
  String path = "/weatherobs";
  var _uri = new Uri.http(baseUri, path, qParams);
  await httpClient.read(_uri, headers: {"Accept": "application/json"});

作为一个拥有大约3周Flutter / Dart经验的人,我认为它是一个基本问题,但是其中几个小时的研究没有找到解决方案。

uri查询参数的结构方式(带方括号[$ in])由feathers.js框架决定。

任何帮助,将不胜感激。

它在另一个线程中引起了我的注意https://stackoverflow.com/questions/40568/are-square-brackets-permitted-in-urls:

url规范RFC 3986通常不允许在url中使用方括号。

我的疑问是由于get请求按照Postman,Chrome浏览器中的预期工作以及使用axios.js的javascript应用程序的工作原理触发的,而不是使用标准http.read方法在Flutter / Dart中开发的应用程序。


它看起来并不像URL中支持[] (IPv6的主机IP除外)。 请参阅网址中是否允许使用方括号?

请检查API是否在编码时接受它们,如:

void main() {
    var url = r'http://demoapi.ap-southeast-2.elasticbeanstalk.com/weatherobs';
    var locationKey = Uri.encodeQueryComponent(r'location[$in]');
    var qParams = 'last=true&$locationKey=Bellambi&$locationKey=Nowra&$locationKey=Sydney Airport&$locationKey=Thredbo Top Station&$locationKey=Hobart&$locationKey=Coolangatta'; 

    try {
      print(Uri.parse(url).replace(query: qParams));
    } catch(e) {
      print(e);
    }
}

DartPad示例

另见api.dartlang.org/stable/1.24.3/dart-core/Uri/...

链接地址: http://www.djcxy.com/p/70171.html

上一篇: http url parameter Invalid Character Error

下一篇: How to encode square brackets in spring url?