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