отправить GET-запрос с телом json в flutter

#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() у него нет тела.