H Hooshyar
H Hooshyar

Reputation: 137

How to fetch data from https with flutter

I have written API with ASP.net core and I want to fetch data from that with Flutter but my code has error like this:

E/flutter (10049): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: HandshakeException: Handshake error in client (OS Error: 
E/flutter (10049):  CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:354))
E/flutter (10049): #0      IOClient.send (package:http/src/io_client.dart:33:24)
E/flutter (10049): <asynchronous suspension>
E/flutter (10049): #1      BaseClient._sendUnstreamed (package:http/src/base_client.dart:176:38)
E/flutter (10049): #2      BaseClient.get (package:http/src/base_client.dart:35:7)
E/flutter (10049): #3      get.<anonymous closure> (package:http/http.dart:46:36)
E/flutter (10049): #4      _withClient (package:http/http.dart:166:20)
E/flutter (10049): #5      get (package:http/http.dart:46:5)
E/flutter (10049): #6      APIServices.fetchStudent (package:aspapi/models/api.services.dart:9:12)
E/flutter (10049): #7      _StudentsState.getStudents (package:aspapi/ui/students.dart:17:19)
E/flutter (10049): #8      _StudentsState.build (package:aspapi/ui/students.dart:32:5)
E/flutter (10049): #9      StatefulElement.build (package:flutter/src/widgets/framework.dart:4619:28)
E/flutter (10049): #10     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4502:15)
E/flutter (10049): #11     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
E/flutter (10049): #12     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (10049): #13     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4481:5)
E/flutter (10049): #14     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4666:11)
E/flutter (10049): #15     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4476:5)
E/flutter (10049): #16     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
E/flutter (10049): #17     Element.updateChild (package:flutter/src/widgets/framework.dart:3214:18)
E/flutter (10049): #18     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (10049): #19     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (10049): #20     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4481:5)
E/flutter (10049): #21     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4476:5)
E/flutter (10049): #22     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
E/flutter (10049): #23     Element.updateChild (package:flutter/src/widgets/framework.dart:3214:18)
E/flutter (10049): #24     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (10049): #25     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (10049): #26     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4481:5)
E/flutter (10049): #27     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4476:5)
E/flutter (10049): #28     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
E/flutter (10049): #29     Element.updateChild (package:flutter/src/widgets/framework.dart:3214:18)
E/flutter (10049): #30     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (10049): #31     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (10049): #32     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4481:5)
E/flutter (10049): #33     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4476:5)
E/flutter (10049): #34     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
E/flutter (10049): #35     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5947:32)
E/flutter (10049): #36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
E/flutter (10049): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:3214:18)
E/flutter (10049): #38     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (10049): #39     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
E/flutter (10049): #40     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (10049): #41     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4481:5)
E/flutter (10049): #42     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4666:11)
E/flutter (10049): #43     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4476:5)
E/flutter (10049): #44     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
E/flutter (10049): #45     Element.updateChild (package:flutter/src/widgets/framework.dart:3214:18)
E/flutter (10049): #46     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527
Debug service listening on ws://127.0.0.1:8773/6hBnRZt2y-g=/ws
Syncing files to device Android SDK built for x86...
E/flutter (10049): [ERROR:flutter/shell/common/shell.cc(202)] Dart Error: Unhandled exception:
E/flutter (10049): HandshakeException: Handshake error in client (OS Error: 
E/flutter (10049):  CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:354))
E/flutter (10049): #0      IOClient.send (package:http/src/io_client.dart:33:24)
E/flutter (10049): <asynchronous suspension>
E/flutter (10049): #1      BaseClient._sendUnstreamed (package:http/src/base_client.dart:176:38)
E/flutter (10049): #2      BaseClient.get (package:http/src/base_client.dart:35:7)
E/flutter (10049): #3      get.<anonymous closure> (package:http/http.dart:46:36)
E/flutter (10049): #4      _withClient (package:http/http.dart:166:20)
E/flutter (10049): #5      get (package:http/http.dart:46:5)
E/flutter (10049): #6      APIServices.fetchStudent (package:aspapi/models/api.services.dart:9:12)
E/flutter (10049): #7      _StudentsState.getStudents (package:aspapi/ui/students.dart:17:19)
E/flutter (10049): #8      _StudentsState.build (package:aspapi/ui/students.dart:32:5)
E/flutter (10049): #9      StatefulElement.build (package:flutter/src/widgets/framework.dart:4619:28)
E/flutter (10049): #10     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4502:15)
E/flutter (10049): #11     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
E/flutter (10049): #12     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (10049): #13     StatefulElement.update (package:flutter/src/widgets/framework.dart:4707:5)
E/flutter (10049): #14     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (10049): #15     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (10049): #16     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (10049): #17     StatelessElement.update (package:flutter/src/widgets/framework.dart:4583:5)
E/flutter (10049): #18     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (10049): #19     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (10049): #20     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (10049): #21     ProxyElement.update (package:flutter/src/widgets/framework.dart:4862:5)
E/flutter (10049): #22     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (10049): #23     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (10049): #24     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (10049): #25     ProxyElement.update (package:flutter/src/widgets/framework.dart:4862:5)
E/flutter (10049): #26     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (10049): #27     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5522:32)
E/flutter (10049): #28     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5957:17)
E/flutter (10049): #29     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (10049): #30     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (10049): #31     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
E/flutter (10049): #32     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (10049): #33     StatefulElement.update (package:flutter/src/widgets/framework.dart:4707:5)
E/flutter (10049): #34     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (10049): #35     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (10049): #36     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (10049): #37     ProxyElement.update (package:flutter/src/widgets/framework.dart:4862:5)
E/flutter (10049): #38     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (10049): #39     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
E/flutter (10049): #40     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
E/flutter (10049): #41     Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
E/flutter (10049): #42     StatefulElement.update (package:flutter/src/widgets/framework.dart:4707:5)
E/flutter (10049): #43     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (10049): #44     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5837:14)
E/flutter (10049): #45     Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
E/flutter (10049): #46     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16

I set Internet permission, change Ip but nothings work this is my code:

class Students extends StatefulWidget {
  @override
  _StudentsState createState() => _StudentsState();
}

class _StudentsState extends State<Students> {
  List<Student> students;

  getStudents(){
    try {
      APIServices.fetchStudent().then((value) {
        Iterable list = json.decode(value.body);
        List<Student> studentList = List<Student>();
        studentList = list.map((model) => Student.fromObject(model)).toList();
        setState(() {
          students = studentList;
        });
      });
    }catch(e){
      print(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    getStudents();
    return Scaffold(
      body: students == null ? Center(child: Text("Empty"),) : ListView.builder(itemCount: students.length,itemBuilder: (context,index){
        return ListTile(
          title: Text(students[index].firstName + " " + students[index].lastName),
          subtitle: Text(students[index].gender),
          onTap: null,
        );
      }),
    );
  }
}

class APIServices{
  static String studentUrl = "https://192.168.1.105:44357/api/student";

  static Future<http.Response> fetchStudent() async{
    return http.get(studentUrl);
  }
}

Upvotes: 0

Views: 719

Answers (1)

H Hooshyar
H Hooshyar

Reputation: 137

First you should change IIS Express to your project name then create a xml file in this directory: android -> app -> src -> main -> res -> xml name of that file is network_security_config.xml after that copy these codes into the file:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
        <domain includeSubdomains="true">10.0.2.2</domain>
    </domain-config>
</network-security-config>

Then in manifest file add this code into application tag:

android:networkSecurityConfig="@xml/network_security_config"

like this:

<application
        ...
        android:networkSecurityConfig="@xml/network_security_config">

Then you can use Dio package like this:

  static Future fetchStudent() async{
    Dio dio = Dio();
    (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
    (client){
      client.badCertificateCallback = (X509Certificate cert,String host,int port) => true;
      return client;
    };
    Response response = await dio.get(https://10.0.2.2:5001/api/student);
    return response.data;
  }

Done :D

Upvotes: 2

Related Questions