Wednesday, March 30, 2022

Flutter : HandshakeException: Handshake error in client (OS Error: E/flutter ( 6264): CERTIFICATE_VERIFY_FAILED

  • ปัญหามีอยู่ว่า flutter project เรา ตอนแรก รัน package http post ได้ปกติ
  • แต่ช่วงหลัง เครื่องเรารัน app แล้วมันค้างที่ post request load ตลอดเลย
  • ดึงข้อมูลจาก restfull post ไม่ได้สักที ประเด็นคือ andriod เครื่องอื่นมันก็รันโปรแกรมเราได้ซะงั้น
  • และตัว  emulator android มันก็รัน mobile app เราได้ปกติ
  • หา bug อยู่พักใหญ่เลย โดยแสดง detail ใน exception ออกมา

  • มันเข้าที่ Unhandle 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))

Solved

  • ในไฟล์ main.dart เพิ่ม class ประมาณนี้เข้าไป หลัง หรือ ก่อน void main() {} ได้หมด

class MyHttpOverrides extends HttpOverrides{

  @override

  HttpClient createHttpClient(SecurityContext context){

    return super.createHttpClient(context)

      ..badCertificateCallback = (X509Certificate cert, String host, int port)=> true;

  }

}

  • แล้วเพิ่ม บรรทัดนี้ใน main()

HttpOverrides.global = new MyHttpOverrides(); 

  • เท่านี้มือถือเราก็รัน app ตัวเองได้แล้ว เฮ้อ เกือบได้เปลี่ยนโทรศัพท์ใหม่ซะแล้ว

เพิ่มเติม

  • หรือเฉพาะบางส่วนของโค้ดใช้แบบนี้ ก่อนเรียกใช้ http.post() แต่ใช้แบบด้านล่านี้ใช้ได้เฉพาะ post ส่วนนี้

final ioc = new HttpClient();

    ioc.badCertificateCallback =

        (X509Certificate cert, String host, int port) => true;

    final http = new IOClient(ioc);

    http.post(); //Your Get or Post Request

Ref

  • https://stackoverflow.com/questions/54285172/how-to-solve-flutter-certificate-verify-failed-error-while-performing-a-post-req
  • https://github.com/flutter/flutter/issues/50699
  • https://flutteragency.com/solve-flutter-certificate_verify_failed-error-while-performing-a-post-request/

No comments:

Post a Comment