6

我有一个多字字符串,我想将其转换为 GET 请求参数。

我有一个/search接受参数的 API 端点query。现在,您的请求通常看起来像http://host/search?query=Hello+World.

我有一个String Hello World,我想将其转换为此 URL 编码参数。

当然,我可以编写逻辑将其分解为单词并+在中间添加一个,但我想知道URI 类是否可以帮助解决这个问题

我正在使用 DarthttpClient提出请求。

Future<String> _getJsonData(String queryToSearch) async {
  List data = new List();
  var httpClient = new HttpClient();

  var request = await httpClient.getUrl(Uri.parse(
      config['API_ENDPOINT'] + '/search?query=' +
          queryToSearch));

  var response = await request.close();
  if (response.statusCode == HttpStatus.OK) {
    var jsonString = await response.transform(utf8.decoder).join();
    data = json.decode(jsonString);
    print(data[0]);
    return data[0].toString();
  } else {
    return "{}";
  }
}

本质上,需要编码queryToSearch为 URL 参数。

4

3 回答 3

12

您可以使用Uri.http(s)which 将所有内容(查询、主机和路径)包装在一起并相应地对其进行编码。

    final uri = new Uri.http(config['API_ENDPOINT'], '/search', {"query": queryToSearch});
于 2018-04-18T12:03:55.870 回答
1

Uri.parse(url_string)如果您以这种方式拥有完整的 URL,则可以使用。

final String accountEndPoint = 'https://api.npoint.io/2e4ef87d9ewqf01e481e';

Future<Account> getAccountData() async {
    try {
      final uri = Uri.parse(accountEndPoint); // <===
      final response = await http.get(uri);
      if (response.statusCode == 200) {
        Map<String, dynamic> accountJson = jsonDecode(response.body);
        return Future.value(Account.fromJson(accountJson));
      } else {
        throw Exception('Failed to get account');
      }
    } catch (e) {
      return Future.error(e);
    }
  }

于 2021-04-16T16:42:55.847 回答