如何解决执行 POST 请求时 Flutter CERTIFICATE_VERIFY_FAILED 错误?

2024-04-23

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

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))

这是我的函数代码 -

Future getAccessToken(String url) async {

    try {
      http.post('url',
          body: {
            "email": "[email protected] /cdn-cgi/l/email-protection",
            "password": "1234"
          }).then((response) {
        print("Reponse status : ${response.statusCode}");
        print("Response body : ${response.body}");
        var myresponse = jsonDecode(response.body);
        String token = myresponse["token"];
      });
    } catch (e) {
      print(e.toString());
    }

这是完整的错误正文:

E/flutter ( 6264): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception: 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)) E/flutter ( 6264): #0      IOClient.send (package:http/src/io_client.dart:33:23) E/flutter ( 6264): <asynchronous suspension> E/flutter ( 6264): #1      BaseClient._sendUnstreamed (package:http/src/base_client.dart:169:38) E/flutter ( 6264): <asynchronous suspension> E/flutter ( 6264): #2     BaseClient.post (package:http/src/base_client.dart:54:7) E/flutter ( 6264): #3      post.<anonymous closure> (package:http/http.dart:70:16) E/flutter ( 6264): #4      _withClient (package:http/http.dart:166:20) E/flutter ( 6264): <asynchronous suspension> E/flutter ( 6264): #5     post (package:http/http.dart:69:5) E/flutter ( 6264): #6
_MyLoginFormState.getAccessToken (package:chart/main.dart:74:7) E/flutter ( 6264): <asynchronous suspension> E/flutter ( 6264): #7
_MyLoginFormState.build.<anonymous closure> (package:chart/main.dart:64:29)

为了在您的项目中全局启用此选项,您需要执行以下操作:

  1. 在 main.dart 文件中,添加或导入以下类:
 import 'dart:io';
 class MyHttpOverrides extends HttpOverrides{
  @override
  HttpClient createHttpClient(SecurityContext? context){
    return super.createHttpClient(context)
      ..badCertificateCallback = (X509Certificate cert, String host, int port)=> true;
  }
}
  1. 在主函数中,在函数定义后添加以下行:
 HttpOverrides.global = MyHttpOverrides();

你的 main.dart 应该是这样的

void main() {
 // Your code
 
 HttpOverrides.global = MyHttpOverrides();
  runApp(const ConsultationApp());
}

This https://github.com/flutter/flutter/issues/19588#issuecomment-406779390评论对解决这个问题很有帮助,请注意...

这应该在开发模式下使用,执行NOT当您想要发布到生产环境时执行此操作,此答案的目的是 使开发对您来说更容易一些,对于生产,您需要解决证书问题并正确使用它,请查看其他答案,因为它可能对您的情况有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决执行 POST 请求时 Flutter CERTIFICATE_VERIFY_FAILED 错误? 的相关文章

随机推荐