반응형
질문
저는 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)
답변
이 옵션을 전체 프로젝트에서 전역적으로 활성화하려면 다음을 수행해야 합니다:
- 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; } }
- main 함수에서 함수 정의 후 다음 줄을 추가합니다:
HttpOverrides.global = MyHttpOverrides();
main.dart 파일은 다음과 같아야 합니다.
void main() { // Your code HttpOverrides.global = MyHttpOverrides(); runApp(const ConsultationApp()); }
이 댓글은 이 문제를 해결하는 데 매우 도움이 되었습니다. 그리고 유의해야 할 점은...
이것은 개발 모드에서 사용해야 합니다. 제품 출시 시에는 사용하지 마십시오. 이 답변의 목적은 개발을 조금 더 쉽게 만드는 것입니다. 제품 출시 시에는 인증서 문제를 해결하고 적절하게 사용해야 합니다. 이와 관련된 다른 답변도 살펴보면 도움이 될 수 있습니다.
반응형
댓글