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
相关产品推荐
相关产品推荐

