You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用http包调用form-data类型API失败问题咨询

问题原因

  • 你的现有实现混淆了JSON请求和form-data请求的配置规则,两个核心错误导致请求失败:
    1. 手动设置了错误的Content-Type请求头:form-data请求的请求头会自动携带boundary分隔符参数,手动写死application/form-data会丢失分隔符,服务端无法解析表单内容
    2. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:15:03