如何在Flutter中使用no-cors模式发送API请求?
Flutter 中实现类似 JS no-cors 的请求方式
首先明确:Flutter 的 HTTP 请求不受浏览器 CORS 策略限制,所以不存在「设置 mode: no-cors」的需求——CORS 是浏览器为了安全引入的同源策略限制,而 Flutter 作为原生客户端,发起的 HTTP 请求是直接与服务器通信,绕过了浏览器的 CORS 检查。
你之前尝试添加 Sec-Fetch-Mode: no-cors 头部无效,是因为这个头部是浏览器在发送请求时自动添加的标识,Flutter 客户端手动添加它不会产生任何实际作用。
解决你的问题:成功发送数据(无需响应)
你的 JS 代码中明确设置了 Content-Type: application/json 并将 body 转为 JSON 字符串,但 Flutter 代码里缺少这两个关键设置,这可能是请求失败的核心原因。以下是修正后的代码:
方法一:使用 http 包发送 JSON 请求
import 'package:http/http.dart' as http; import 'dart:convert'; // ... var corpo = { "LastName": "Teste 2", "email": "teste2@teste.com", "LeadSource": "Google", "MobilePhone": "", "idEmpreendimentoInteresse__c": "", "Campanha__c": "", "UTMMidia__c": "" }; try { // 直接发送请求,无需处理响应 await http.post( Uri.parse('https://myurl.com'), headers: <String, String>{ "Content-Type": "application/json", // 必须设置这个头部 }, body: jsonEncode(corpo), // 将对象转为 JSON 字符串 ); print("数据发送成功"); } catch (e) { print("发送失败: $e"); }
方法二:使用更底层的 HttpClient(适合无需响应的场景)
如果完全不需要等待服务器响应,可以使用 HttpClient 发送请求后直接关闭连接,提升效率:
import 'dart:io'; import 'dart:convert'; // ... var corpo = { "LastName": "Teste 2", "email": "teste2@teste.com", "LeadSource": "Google", "MobilePhone": "", "idEmpreendimentoInteresse__c": "", "Campanha__c": "", "UTMMidia__c": "" }; var client = HttpClient(); try { var request = await client.postUrl(Uri.parse('https://myurl.com')); request.headers.set('Content-Type', 'application/json'); request.write(jsonEncode(corpo)); // 发送请求后直接关闭,不等待响应 await request.close(); print("数据已发送"); } catch (e) { print("发送失败: $e"); } finally { client.close(); }
关键注意点
- 确保你的请求
Content-Type与服务器期望的一致(JS 中用了 JSON,所以 Flutter 也要对应) - 无需添加任何与 CORS 相关的头部,Flutter 本身不做同源检查
- 如果只需要发送数据,无需处理响应,可以忽略请求的返回值,甚至提前关闭连接
内容的提问来源于stack exchange,提问作者Guilherme Machado
相关产品推荐
相关产品推荐

