如何在 Flutter 中将 cURL 转换为 http 帖子

Fir*_*rat 5 curl dart flutter

我有一个 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\"}"
Run Code Online (Sandbox Code Playgroud)

我的愿望是编写一个代码来完成上述命令的确切工作,我的意思是如何以正确的方式解码/编码东西。这是我到目前为止得到的:

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) {
 });
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Ric*_*eap 10

无需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);
}
Run Code Online (Sandbox Code Playgroud)