我正在用DART发送一个POST请求.当我在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": "xyz@xyz.com",
            "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)

推荐答案

为了明确起见,特别是为了让新来者了解Flutter/Dart,以下是您需要做的事情,以便在您的项目中在全局启用此选项:

  1. 在main.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.global=MyHttpOverrides();

This条 comments 对通过这件事很有帮助,and please note that...

This should be used while in development mode, do NOT do this when you want to release to production, the aim of this answer is tomake the development a bit easier for you, for production, you need to fix your certificate issue and use it properly, look at the other answers for this as it might be helpful for your case.

Flutter相关问答推荐

如何在列表磁贴上添加行

当第二页在单独的小工具中使用Navigator.pop时,Navigator.push不起作用

如何为Android 12及以上设备以及Android 11及以下设备动态处理Splash Screen?如果可能的话没有包裹

无效字符(位于字符68处)flutter—update—... europe-west1.firebasedatabase.app/

创建后检索FiRestore文档ID

在Flutter 中将参数从一个类传递到另一个类

Riverpod状态管理-在调用请求时更新用户界面

SingleChildScrollView在ErrorWidget.builder中不工作

FOR回路中的Flutter 模型

如何在 Flutter 中创建厚度沿着容器逐渐减小的边框

2023 年如何使用 youtube_explode_dart 包下载 URL?

Flutter记录返回类型问题

如果不刷新页面,我看不到从 Firestore 中提取的数据

Flutter Dart 功能弹出错误的小部件?

如何在 flutter 的alert 对话框中实现进度指示器?

如何获得Flutter 的时差?

使用 mocktail 包进行单元测试时,类型Null不是Future类型的子类型

setState 不会在第一次更新 - Flutter

RangeError(索引):无效值:有效值范围为空:点击文章时为0

Flutter - 如何调用此函数?