执行 POST 请求时出现 CERTIFICATE_VERIFY_FAILED 错误?

Sut*_*ath 3 api http dart flutter

在此输入图像描述

我在 Dart 中发送一个 post 请求,当我在 Postman 等 API 测试工具上测试它时,它给出了响应。但是当我运行该应用程序时。它给了我以下错误:-

这是我的函数代码 -

var request =
    http.MultipartRequest('POST', Uri.parse('https://myurl/files/'));
request.files.add(await http.MultipartFile.fromPath('file', pathfile));

http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
  print(await response.stream.bytesToString());
} else {
  print(response.reasonPhrase);
}
Run Code Online (Sandbox Code Playgroud)

错误

E/flutter ( 6264): HandshakeException: Handshake error in client (OS Error: E/flutter ( 6264):  CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:363))
Run Code Online (Sandbox Code Playgroud)

小智 10

 **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() async {
WidgetsFlutterBinding.ensureInitialized();
HttpOverrides.global = new MyHttpOverrides();
runApp(Myapp());}
Run Code Online (Sandbox Code Playgroud)

  • @TeunK 通常使用 REST API,您可以通过浏览器访问网站。浏览器可以访问系统 CA 证书存储。浏览器获取网址并从中获取证书,然后根据系统上存储的 CA 证书对其进行验证。据我所知,Flutter 无法访问该系统 CA 证书存储。因此,您必须手动告诉它要信任哪些证书。上面的代码实际上通过不验证证书来破坏 TSL 证书的目的。这个答案仅适用于测试。 (5认同)