在Flutter中使用Dio进行POST时遇到问题

时间:2019-11-14 15:32:39

标签: curl flutter dart

我正在尝试使用Dio在flutter中复制以下curl命令。

$ curl -X POST -d '{"k":"cc","v":"4i8pwFwPkImsnLmIj54BYJA4Z94j0OLyl7vwKecELzYGKbM5Vra6H9T0DI"}' http://192.168.0.1/set

它用于设置处于HotSpot模式的IOT设备,因此设置为192.168.0.1的POST。

这是到目前为止我尝试过的代码。

Future<Response> doClaimCodePost(Alice alice) async {
Dio dio = new Dio();
var data = {
  "k": "cc",
  "v": _claimCode,
};

//FormData formData = FormData.fromMap(data);

dynamic jsonData = json.encode(data);

dio.interceptors.add(alice.getDioInterceptor());

return await dio.post("http://192.168.0.1/set",
    data: jsonData,
    options: Options(contentType: Headers.formUrlEncodedContentType));
}

我正在将数据转换为JSON,因为curl命令中的内容就是这样。我将内容类型设置为“ Url编码”,因为这是curl POST命令的作用。

我没有构建此API,我只是不得不使用它...

我已经测试了curl命令,它可以工作。

我熟悉website,它可以神奇地将curl命令转换为Dart代码,但是我想使用Dio。

问题:如何使用Dio复制curl命令?

1 个答案:

答案 0 :(得分:0)

如果您要发送json,为什么要使用formUrlEncodedContentType作为类型?

尝试下一个代码:

final _headers = {
    HttpHeaders.contentTypeHeader: "application/json"
}
return await dio.post("http://192.168.0.1/set",
    data: data,
    options: Options(headers: _headers));
}