#json #api #http #flutter #dart
#json #API #http #flutter #dart
Вопрос:
Мне нужно отправить GET-запрос в API из моего приложения flutter с параметрами json в теле. Я погуглил это (возможно, я не так хорошо погуглил), но у многих людей возникает проблема с отправкой GET-запроса с телом JSON в flutter. Когда я пытаюсь выполнить запрос в POSTMAN, он работает.
var url = 'linkofapi;
var response = await http.get(url);
Ответ №1:
Смотрите, прежде всего, GET
операции не предназначены для отправки данных. Он предназначен для получения данных, отсюда и название метода, GET
следовательно http.get()
, не имеет body
.
Если отправка данных является крайним требованием, то вам нужно использовать Uri
для добавления query parameter
к http
методу.
Пожалуйста, прочитайте о Uri.http flutter для получения дополнительной информации.
Вы можете сделать что-то подобное, чтобы достичь того, чего вы хотите:
// Please note "...." for more information, please do not use this as is
// Just wanted to give a heads up
final query = {
'name': your_name,
'email': your_email,
'password': your_password
...
};
var url = 'linkofapi;
// Now you use the query to pass it to. your get method
final uri = Uri.http(url, '/path', query);
// adding headers to the query
final header = {HttpHeaders.contentTypeHeader: 'application/json'};
// doing the operation finally
final response = await http.get(uri, headers: header);
Комментарии:
1. Мне нужно передавать данные в теле, а не в URL
2. Я попробовал этот окончательный uri = Uri.http(url, «, запрос); потому что мне не нужно передавать параметры в url. Но это не сработало
3. «Мне нужно передать данные в теле, а не в URL» — Тогда это не «GET».
4. Мы называем это «недопустимым способом создания HTTP-запроса». У GET нет тела. Точка. Прекратите перебор спецификации.
5. @RandalSchwartz Спасибо, брат, я был неправ. Это был мой первый опыт работы с HTTP-запросом, теперь я понимаю, что вы сказали. Еще раз спасибо, брат
Ответ №2:
Попробуйте это
Future<http.Response> createUser({name, email, password, gender, dob}) {
return http.get(
'http://$BASE_API_URL/users',
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, String>{
'name': name,
'email': email,
'password': password,
'gender': gender,
'dob': dob,
}),
);
}
Комментарии:
1. это говорит о том, что именованный параметр ‘body’ не определен
2. Я использовал его следующим образом response = http.get( ‘http:// $BASE_API_URL/users’, заголовки: <String, Строка>{ ‘Content-Type’: ‘application/json; charset=UTF-8’, }, тело: jsonEncode(<String, строка>{ ‘name’: имя, ’email’: электронная почта, ‘password’: пароль, ‘gender’: пол, ‘dob’: dob, }), );
3. Это не ответ, мой друг. Пожалуйста, рассмотрите возможность его редактирования, потому что
http.get()
у него нет тела.