Flutter使用http包调用form-data类型API失败问题咨询
问题原因
- 你的现有实现混淆了JSON请求和form-data请求的配置规则,两个核心错误导致请求失败:
- 手动设置了错误的
Content-Type请求头:form-data请求的请求头会自动携带boundary分隔符参数,手动写死application/form-data会丢失分隔符,服务端无法解析表单内容 - 用
jsonEncode编码请求体:form-data需要按表单规则拼接参数,不是JSON格式
- 手动设置了错误的
- Dart的http包发送form-data需要使用
MultipartRequest类实现,不能直接用普通post方法传JSON body。
修正后代码
Future<LocationDetailsById> locationDetailsByID(BuildContext context, String locationID) async { String url = baseUrl + "location/detailsbyid"; Utils.showLoaderDialog(context); // 初始化MultipartRequest var request = http.MultipartRequest('POST', Uri.parse(url)); // 配置请求头,不要手动加Content-Type request.headers.addAll({ 'Accept': 'application/json', 'Authorization': 'Bearer ${Utils.token}', }); // 添加form-data字段 request.fields['location_id'] = locationID; // 发送请求并获取响应 final streamedResponse = await request.send(); final response = await http.Response.fromStream(streamedResponse); print("request $locationID"); print("response ${response.body}"); if (response.statusCode == 200) { Navigator.pop(context); return LocationDetailsById.fromJson(json.decode(response.body)); } else { return Utils.errorDialog(context, "Something went wrong"); } }
内容的提问来源于stack exchange,提问作者Vinay Bakle
相关产品推荐
相关产品推荐

