- ปัญหามีอยู่ว่า 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/