본문 바로가기
expert

POST 요청을 수행하는 동안 Flutter CERTIFICATE_VERIFY_FAILED 오류를 해결하는 방법은 무엇입니까?

by RWriter 2023. 1. 28.
반응형

질문 제목:

POST 요청을 수행하는 동안 Flutter CERTIFICATE_VERIFY_FAILED 오류를 해결하는 방법은 무엇입니까?

질문 내용:

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)

해결 답변:

프로젝트에서 전역적으로 이 옵션을 활성화하려면 다음을 수행해야 합니다.

  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. 기본 함수에서 함수 정의 뒤에 다음 줄을 추가합니다.

HttpOverrides.global = MyHttpOverrides();

댓글은 이 문제를 통과하는 데 매우 도움이 되었으며, 참고하시기 바랍니다...

이것은 개발 모드에 있는 동안 사용해야 합니다. 프로덕션으로 릴리스하려는 경우에는 이 작업을 수행 하지 마십시오 . 이 답변의 목적은 개발을 조금 더 쉽게 만드는 것입니다. 프로덕션의 경우 인증서 문제를 수정하고 사용해야 합니다. 귀하의 사례에 도움이 될 수 있으므로 이에 대한 다른 답변을 확인하십시오.

반응형

댓글