如何在flutter中使用表单数据进行http发布



我正在尝试执行http post请求,我需要将主体指定为表单数据,因为服务器不将请求作为原始或参数。

这是我试过的代码

** Future getApiResponse(url) async {
try {
// fetching data from the url
final response = await http.get(Uri.parse(url));
// checking status codes.
if (response.statusCode == 200 || response.statusCode == 201) {
responseJson = jsonDecode(response.body);
// log('$responseJson');
}
// debugPrint(response.body.toString());
} on SocketException {
throw FetchDataException(message: 'No internet connection');
}
return responseJson;
}
}

但它不起作用。这是邮差要求

在此处输入图像描述

它对parms不起作用。只在身体里。这是因为我想这是形式数据。如何使用HTTPpost在flutter中调用表单数据?

首先,不能用GET请求发送请求体(必须使用POST/PUT等(,可以用Map作为请求体作为form data,因为http包中的请求体只有3种类型:String, List or Map。尝试如下:

var formDataMap = Map<String, dynamic>();
formDataMap['username'] = 'username';
formDataMap['password'] = 'password';
final response = await http.post(
Uri.parse('http/url/of/your/api'),
body: formDataMap,
);
log(response.body);

对于HTTP,您可以尝试这种方式

final uri = 'yourURL';
var map = new Map<String, dynamic>();
map['device-type'] = 'Android';
map['username'] = 'John';
map['password'] = '123456';
http.Response response = await http.post(
uri,
body: map,
);

我已经使用dio:^4.0.6创建FormData和API调用。

//Create Formdata
formData = FormData.fromMap({
"username" : "John",
"password" : "123456", 
"device-type" : "Android"
});

//API Call
final response = await (_dio.post(
yourURL,
data: formData,
cancelToken: cancelToken ?? _cancelToken,
options: options,
))

最新更新