1. ホーム
  2. dart

[解決済み] POSTリクエスト中にCERTIFICATE_VERIFY_FAILEDエラーが発生した場合、どのように解決しますか?

2022-09-25 11:22:08

質問

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": "[email protected]",
            "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の初心者のためにわかりやすくするために、プロジェクトでこのオプションをグローバルに有効にするために必要なことを説明します。

  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. main関数で、関数定義の後に以下の行を追加してください。

HttpOverrides.global = MyHttpOverrides()。

これは のコメントは、この問題を通過するために非常に有用であった。 とご了承ください。

これは開発モードの時に使うべきもので、次のようにします。 ではない は、本番環境へリリースする際に使用するもので、この回答の目的は、次のとおりです。 本番では、証明書の問題を修正し、適切に使用する必要があります。あなたのケースに役立つかもしれないので、これについては他の回答を見てください。