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

Flutter HTTP Post请求响应体为空及CORS配置问题求助

解决方案

1. 修正请求头的错误配置

你把服务器端才需要返回的CORS响应头当成请求头发给API了,这是核心问题之一。这些Access-Control-*字段是服务器告诉浏览器允许跨域的响应头,不是客户端请求时要带的。删掉这些多余字段,只保留必要的请求头:

修正后的代码:

try {
  final response = await http.post(
    Uri.parse('https://webservicesp.anaf.ro/PlatitorTvaRest/api/v8/ws/tva'),
    headers: <String, String>{
      'Content-Type': 'application/json',
      'Cache-Control': 'no-cache',
    },
    body: jsonEncode({
      'cui': _identificationController.text.trim(),
      'data': DateFormat('yyyy-MM-dd').format(DateTime.now())
    }),
  );

  if (response.statusCode == 200) {
    print(response.body.length);
    if (response.body.isNotEmpty) {
      final responseData = jsonDecode(response.body);
      print(responseData);
    } else {
      print("Response body is empty\n");
    }
  } else {
    throw Exception('Failed to fetch company data from ANAF: ${response.statusCode}');
  }
} catch (e) {
  print(e);
}

2. 处理Web环境的CORS问题

开发环境临时解决

如果只是在Chrome上开发测试,可继续用禁用web安全的方式启动Flutter:

flutter run -d chrome --web-browser-args="--disable-web-security"

注意:该方式仅适合开发调试,不能用于生产环境。

生产环境/正规开发配置

要合规处理CORS,有两种可行方式:

  • 后端API配置CORS:联系API运维方,让他们在服务器端添加允许你的域名的CORS规则(比如允许指定Origin、Content-Type请求头,允许POST方法等)。
  • Flutter Web代理转发:在项目web目录下创建proxy.config.json文件,内容如下:
{
  "/PlatitorTvaRest": {
    "target": "https://webservicesp.anaf.ro",
    "secure": true,
    "changeOrigin": true
  }
}

启动项目时指定代理配置:

flutter run -d chrome --web-proxy-config=web/proxy.config.json

通过本地代理转发请求,可避开浏览器的CORS限制。

3. 排查500错误和空响应

  • 检查cui参数有效性:确保输入的是合法的税号,空值或无效值可能导致API返回500或空响应。
  • 验证日期格式:尝试用UTC时间格式化,比如DateFormat('yyyy-MM-dd').format(DateTime.now().toUtc()),确认是否符合API要求。
  • 核对API版本:确认v8版本的接口是否有参数或请求规则变更,避免因版本不匹配导致异常。

内容的提问来源于stack exchange,提问作者Roberto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:42:40