来源: dart – 执行 POST 请求时如何解决 Flutter CERTIFICATE_VERIFY_FAILED 错误? – IT工具网
我正在 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": "xyz@xyz.example",
"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 的新手更清楚,为了在项目中全局启用此选项,您需要执行以下操作:
- 在您的 main.dart 文件中,添加或导入以下类:
class MyHttpOverrides extends HttpOverrides{
@override
HttpClient createHttpClient(SecurityContext? context){
return super.createHttpClient(context)
..badCertificateCallback = (X509Certificate cert, String host, int port)=> true;
}
}
- 在您的主函数中,在函数定义之后添加以下行:
HttpOverrides.global = MyHttpOverrides();
This评论对解决这个问题很有帮助,请注意…
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 to make 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.
关于dart – 执行 POST 请求时如何解决 Flutter CERTIFICATE_VERIFY_FAILED 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54285172/