Как конвертировать cURL в http пост в Flutter - PullRequest
0 голосов
/ 04 июля 2019

У меня успешно работает Rest API, и я могу сделать сообщение curl следующим образом:

curl -X POST "{{baseURL}}/api/auth/login" -H "accept: application/json" -H "Content-Type: application/json-patch+json" -d "{ \"nick\": \"string"\", \"password\": \"string\"}"

Я хочу написать код, который будет выполнять ту же работу, что и указанная выше команда, я имею в виду, как декодировать / кодироватьвсе правильно.Вот что я получил до сих пор:

Future<http.Response> postRequest (String nick, String password) async {
  var url ='{{baseURL}}/api/auth/login';
  var body = jsonEncode({ "nick": "$nick", "password": "$password"});

  print("Body: " + body);

  http.post(url,
    headers: {"accept": "application/json","Content-Type": "application/json- 
     patch+json"},
    body: body
  ).then((http.Response response) {
 });
}

Спасибо!

Ответы [ 2 ]

1 голос
/ 04 июля 2019
var map = new Map<String, dynamic>();
map["nick"] = nick;
map["password"] = password;
http.post(url, body: map);
1 голос
/ 04 июля 2019

Нет необходимости использовать then внутри функции async - обычно проще и удобнее читать await. Я предполагаю, что вы на самом деле не хотите возвращать Response и оставлять его вызывающей стороне для обработки этого. Так как ваше согласие установлено на JSON, вы также можете сразу же декодировать ответ и вернуть проанализированное дерево (или некоторую его часть) - но только предложение.

(Я немного исправил стиль и форматирование.)

Попробуйте это:

Future<Map<String, dynamic>> postRequest(String nick, String password) async {
  // todo - fix baseUrl
  var url = '{{baseURL}}/api/auth/login';
  var body = json.encode({
    'nick': nick,
    'password': password,
  });

  print('Body: $body');

  var response = await http.post(
    url,
    headers: {
      'accept': 'application/json',
      'Content-Type': 'application/json-patch+json',
    },
    body: body,
  );

  // todo - handle non-200 status code, etc

  return json.decode(response.body);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...