본문 바로가기
Flutter/Flutter FAQ

POST 요청을 수행하는 동안 Flutter CERTIFICATE_VERIFY_FAILED 오류를 해결하는 방법은 무엇인가요?, How to solve Flutter CERTIFICATE_VERIFY_FAILED error while performing a POST request?

by 베타코드 2023. 5. 12.
반응형

질문


저는 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.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 파일에 다음 클래스를 추가하거나 가져옵니다:
 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. main 함수에서 함수 정의 후 다음 줄을 추가합니다:
 HttpOverrides.global = MyHttpOverrides();

main.dart 파일은 다음과 같아야 합니다.

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

댓글은 이 문제를 해결하는 데 매우 도움이 되었습니다. 그리고 유의해야 할 점은...

이것은 개발 모드에서 사용해야 합니다. 제품 출시 시에는 사용하지 마십시오. 이 답변의 목적은 개발을 조금 더 쉽게 만드는 것입니다. 제품 출시 시에는 인증서 문제를 해결하고 적절하게 사용해야 합니다. 이와 관련된 다른 답변도 살펴보면 도움이 될 수 있습니다.

반응형

댓글