feathers.js(https://feathersjs.com/)を使用してREST APIを開発しました。
パッケージを使用してFlutterでhttp 'read'リクエストを実行しようとすると、http/http.dartエラーが発生しました。 http.dartライブラリは、私がuriに渡すクエリパラメータを正しく解析できません。http urlパラメータ無効な文字エラー
Android Studioのデバッグコンソールでエラーが発生しました。
FormatException:E(文字84時)無効な文字/フラッター (11338):... &場所lk.com/weatherobs?last=true = [$で] Bellambi &場所=ナウラ[で$]。 ...
エラーは、角括弧とおそらく$記号( '[$ 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」を付けずに「r」を付けないようにしました。
私もフラッター/ダートでの経験の約3週間で人として角括弧例えば「[$で]」には成功とまったく同じエラー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"});
でのparamsでのHttpClientを使用してみましたが
私はそれが基本的な問題だと信じていますが、数時間の研究が解決策を見つけ出していないものです。
uriクエリーパラメーターがどのように構造化されているか(角括弧[$ in])は、feathers.jsフレームワークによって決まります。
ご協力いただければ幸いです。
別のスレッドhttps://stackoverflow.com/questions/40568/are-square-brackets-permitted-in-urlsに私の注意に持って来られました:URL指定RFC 3986は、一般的に、URLに角括弧を許可していないこと
。
私の質問は、郵便配達員、Chromeブラウザ、およびaxios.jsを使用しているjavascriptアプリケーションで意図されたとおりに動作しますが、標準http.readメソッドを使用してFlutter/Dartで開発されたアプリケーションでは動作しません。
https://stackoverflow.com/questions/40568/are-square-brackets-permitted-in-urlsが許可されていないと思われます。おそらく、https://api.dartlang.org/のクエリをエンコードすると動作します安定/ 1.24.3/dart-core/Uri/encodeQueryComponent.html –
ようこそhttps://dartpad.dartlang.org/c8f79 14404fe02c407007d16e2463126 –
すばらしい答えガンター。示されているように、角括弧を%5Bと%5Dに置き換えてください。ダーツパッドの例をありがとう。 –