Dart 颤振图像。网络(…)抛出握手异常
几天前,我开始使用颤振和飞镖,目前进展顺利。非常好的工具,但是对于应用程序,我正在构建我需要一张来自Web服务器a的图片,每当我尝试使用Dart 颤振图像。网络(…)抛出握手异常,dart,flutter,Dart,Flutter,几天前,我开始使用颤振和飞镖,目前进展顺利。非常好的工具,但是对于应用程序,我正在构建我需要一张来自Web服务器a的图片,每当我尝试使用new Image.network(URL)调用它时,会引发此异常: 握手例外: Handshake error in client (OS Error: CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(ssl_cert.c:345)). 如果有人能帮助我,请提前感谢。您是否使
new Image.network(URL)
调用它时,会引发此异常:
握手例外:
Handshake error in client (OS Error: CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(ssl_cert.c:345)).
如果有人能帮助我,请提前感谢。您是否使用Windows并使用卡巴斯基防病毒软件?我不知道所有的技术细节,但是这个杀毒软件会影响握手。禁用它应该会有所帮助。
这里有一个类似的问题,不过我想这不是Dart SDK的问题:这对我来说很好
var image = new Container(
width: 100.0,
height: 100.0,
decoration: new BoxDecoration(
borderRadius: new BorderRadius.circular(3.0),
color: const Color(0xff7c94b6),
image: new DecorationImage(
image: new NetworkImage(
"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRwlzVkvBV1EA_w87NFvYAhT-EC2HMRpfTuRFtHE7nXE5GPvnsQ"),
fit: BoxFit.cover,
),
),
);
请检查此项以添加badCertificateCallback
_client = new HttpClient();
_client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
跳过SSL认证问题并解决
Image.network(url)
问题的一种方法是使用以下代码:
import 'dart:io';
class MyHttpOverrides extends HttpOverrides{
@override
HttpClient createHttpClient(SecurityContext context){
return super.createHttpClient(context)
..badCertificateCallback = (X509Certificate cert, String host, int port)=> true;
}
}
void main(){
HttpOverrides.global = new MyHttpOverrides();
runApp(new MyApp());
}
我也有同样的问题!能够解决it应用程序(这是一个与服务器相关的问题,所以最好在服务器端解决!) sol:在本地添加用户信任证书!或者跳过检查! 我选择添加证书。 将您的证书(针对您的特定域)作为资产添加到pubsec.yaml文件中。(您可以从web浏览器中收集) 然后在发出网络请求之前,在应用程序中的某个位置添加以下代码。例如,在main函数中
void main() async{
await WidgetsFlutterBinding.ensureInitialized();
ByteData data = await
rootBundle.load('assets/raw/certificate.pem');
SecurityContext context = SecurityContext.defaultContext;
context.setTrustedCertificatesBytes(data.buffer.asUint8List());
runApp(MyApp());
}
谢谢你的帮助。我发现了我的问题,这是一个证书问题,不知何故,我的应用程序没有在我的手机上找到正确的证书(可能是因为它将其视为模拟器?)。我试着用
badCertificateCallback
和一个正常的HttpRequest
来完成它,但无法从数据中获取图像。服务器现在传输中间证书,这为我解决了问题。我尝试了你的代码,效果很好。我想这正是我想要的映像服务器。同意@JokingWolf:最好将中间证书添加到Web服务器/负载平衡器终止SSL连接的.pem文件中。与Comodo颁发的证书有相同的问题。我的Flatter应用程序失败,错误为CERTIFICATE\u VERIFY\u FAILED CERTIFICATE VERIFY FAILED:无法获取本地颁发者证书。添加中间证书修复了这个问题。我不使用卡巴斯基。谢谢你的输入。是的,这是可能的。请看:这是使用HttpClient覆盖所有API调用的完美解决方案。这种方法不会产生漏洞吗?中间的人和东西。好像这个问题应该在服务器上解决,而不是这样做。正如miguelps指出的,这是一个糟糕的解决方案,不应该用于生产代码!!!
void main() async{
await WidgetsFlutterBinding.ensureInitialized();
ByteData data = await
rootBundle.load('assets/raw/certificate.pem');
SecurityContext context = SecurityContext.defaultContext;
context.setTrustedCertificatesBytes(data.buffer.asUint8List());
runApp(MyApp());
}