Flutter中如何让DefaultCacheManager下载文件时忽略证书

在Flutter中使用DefaultCacheManager下载文件时,遇到SSL证书验证失败的问题。如何配置DefaultCacheManager使其在下载过程中忽略证书验证?目前尝试设置HttpOverrides.global为自定义的HttpOverrides子类,但似乎不生效。请问正确的实现方式是什么?需要兼容Android和iOS平台。

2 回复

在Flutter中,使用DefaultCacheManager下载文件时忽略证书,可以通过自定义HttpOverride实现。在main.dart中设置:

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 = MyHttpOverrides();
  runApp(MyApp());
}

这样即可忽略证书验证。

更多关于Flutter中如何让DefaultCacheManager下载文件时忽略证书的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,让DefaultCacheManager下载文件时忽略证书验证,可以通过自定义HttpClient实现。以下是具体步骤:

  1. 创建自定义HttpOverrides: 重写createHttpClient方法,配置HttpClient忽略证书错误。
import 'dart:io';
import 'package:flutter/foundation.dart';

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)
      ..badCertificateCallback = 
          (X509Certificate cert, String host, int port) => true;
  }
}
  1. 在应用初始化时设置: 在main()函数中设置全局HttpOverrides。
void main() {
  HttpOverrides.global = MyHttpOverrides();
  runApp(MyApp());
}
  1. 使用DefaultCacheManager: 现在DefaultCacheManager会自动使用这个配置,忽略证书验证。
final file = await DefaultCacheManager().getSingleFile(url);

注意事项

  • 这会影响整个应用的HTTP请求,仅建议在开发或测试环境使用。
  • 生产环境中应使用有效证书,忽略证书会带来安全风险。

通过以上步骤,即可让DefaultCacheManager在下载文件时跳过证书验证。

回到顶部