Flutter Dio请求报错NO_RENEGOTIATION(ssl_lib.cc:1725) error 268435638求助
解决Flutter Dio POST请求出现NO_RENEGOTIATION(ssl_lib.cc:1725) error 268435638的问题
核心问题分析
你遇到的SSL协商错误,大概率是请求格式与Postman不一致导致的,结合代码和Postman截图,存在几个明显矛盾点:
- 代码用
FormData.fromMap()构造请求体,但手动设置了Content-Type: application/json,导致请求格式混乱;而Postman实际是用Raw JSON格式提交数据。 - 手动指定
Content-Length: 173,该值与实际请求体长度可能不匹配,触发服务器解析异常,进而引发SSL协商错误。 Host、Connection等属于Dio自动处理的请求头,手动设置会干扰正常请求流程。
具体修复步骤
修正请求体格式
移除FormData.fromMap(),直接将requestData作为data参数传入,Dio会自动将其序列化为JSON并设置正确的Content-Type头。移除不必要的请求头
删除手动设置的Content-Length、Host、Connection,这些字段Dio会根据请求自动生成,手动设置易出错。修改后的代码示例
final Map<String, dynamic> requestData = { "email": Encryption().encryptKey(email), "password": Encryption().encryptKey(password), "user_ad": userType, "token_fcm": _tokenFcm, "is_encrypted": true, }; Response response = await _dio.post( "$basePath/login", data: requestData, // 直接传Map,Dio自动转JSON options: Options( headers: { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", "Cache-Control": "no-cache", }, validateStatus: (status) { print("INI STATUS"); print(status); return (status ?? 0) < 500; }, followRedirects: false, ) ); final data = response.data;
若仍存在SSL问题的补充方案
如果修改后还是出现SSL错误,可能是服务器证书或TLS版本兼容问题,可尝试配置Dio的SSL验证:
import 'dart:io'; // 初始化Dio时添加以下配置 _dio.httpClientAdapter = HttpClientAdapter() { @override HttpClient createHttpClient() { final client = HttpClient(); // 允许所有证书(仅测试环境使用,生产环境禁用) client.badCertificateCallback = (cert, host, port) => true; // 若服务器有自定义证书,可传入证书字节 // client.securityContext.setTrustedCertificatesBytes(证书字节数据); client.connectionTimeout = const Duration(seconds: 10); return client; } };
内容的提问来源于stack exchange,提问作者Ikhsan Arfian Nugraha
相关产品推荐
相关产品推荐

