Как добавить параметры запроса в HTTP-запрос Dart?
Как вы правильно добавляете параметры запроса к запросу Dart http get? Я не смог получить свой запрос, чтобы правильно ответить, пытаясь добавить '? Param1 = one & param2 = two' к моему URL-адресу, но он корректно работает в Postman. Вот суть моего кода:
final String url = "https://www.myurl.com/api/v1/test/";
String workingStringInPostman = "https://www.myurl.com/api/v1/test/123/?param1=one¶m2=two";
Map<String, String> qParams = {
'param1': 'one',
'param2': 'two',
};
var res = await http
.get(Uri.encodeFull("$url${widget.pk}/"),
headers: {HttpHeaders.authorizationHeader: "Token $token",
HttpHeaders.contentTypeHeader: "application/json"},
);
$ {Widget.pk} является просто целочисленным значением, являющимся pass (см. Значение 123 в переменной workStringInPostman.
QParams существует для попустительности, если требуется параметр Uri.
Пример кода будет приветствоваться.
Ответы
Ответ 1
Вы захотите построить Uri
и использовать его для запроса. Что-то вроде
var queryParameters = {
'param1': 'one',
'param2': 'two',
};
var uri =
Uri.https('www.myurl.com', '/api/v1/test/${widget.pk}', queryParameters);
var response = await http.get(uri, headers: {
HttpHeaders.authorizationHeader: 'Token $token',
HttpHeaders.contentTypeHeader: 'application/json',
});
См. Https://api.dartlang.org/stable/2.0.0/dart-core/Uri/Uri.https.html.
Ответ 2
Существует пакет dart, который предоставляет некоторые вспомогательные классы для http-запросов.
BasicUtils: https://github.com/Ephenodrom/Dart-Basic-Utils
Установите его с помощью:
dependencies:
basic_utils: ^1.4.0
использование
Вы можете добавить карту заголовков и параметров запроса к каждому запросу. Смотрите пример:
// Define some headers and query parameters
Map<String, String> headers = {
"Accept": "application/json"
};
Map<String, String> queryParameters = {
"foo": "bar"
};
// Body
String body = "{ 'some':'json'}";
// Send request
Map<String, dynamic> responseData = await HttpUtils.postForJson("api.com/dosomething", body,
headers: headers, queryParameters: queryParameters);
Дополнительная информация:
Это все методы из класса HttpUtils.
Future<Map<Response> getForFullResponse(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> getForJson(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<String> getForString(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<Map<Response> postForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> postForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> postForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Response> putForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> putForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> putForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Response deleteForFullResponse(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> deleteForJson(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> deleteForString(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Map<String, dynamic> getQueryParameterFromUrl(String url);
String addQueryParameterToUrl(String url, Map<String, dynamic> queryParameters);
Ответ 3
Принятый ответ не работает для меня, но добавляет '& amp;' без кавычек до конца URL решает мою проблему. В этом случае измените следующую строку:
String workingStringInPostman = "https://www.myurl.com/api/v1/test/123/?param1=one¶m2=two";
на это: (обратите внимание на '& amp;' в конце).
String workingStringInPostman = "https://www.myurl.com/api/v1/test/123/?param1=one¶m2=two&";