我正在 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)
为了在您的项目中全局启用此选项,您需要执行以下操作:
- 在 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;
}
}
- 在主函数中,在函数定义后添加以下行:
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(使用前将#替换为@)