Преобразовать параметр String в GET-запрос в Dart, используя стандартную библиотеку
У меня есть строка из нескольких слов, которую я хотел бы преобразовать в параметр запроса GET.
У меня есть конечная точка API /search
который принимает в параметре query
, Теперь обычно ваш запрос будет выглядеть http://host/search?query=Hello+World
,
у меня есть String
Привет мир, который я хотел бы преобразовать в этот URL-кодированный параметр.
Конечно, я мог бы просто написать логику, чтобы разбить ее на слова и добавить +
между ними, но мне было интересно, может ли класс URI помочь с этим
Я использую дартс httpClient
сделать запрос.
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.
3 ответа
Ты можешь использовать Uri.http(s)
которые объединяют все (запрос, хост и путь) вместе и кодируют их соответственно.
final uri = new Uri.http(config['API_ENDPOINT'], '/search', {"query": queryToSearch});
Класс Uri предоставляет методы для этого
Ты можешь использовать
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);
}
}