Как получить данные из https с флаттером - PullRequest
0 голосов
/ 24 марта 2020

Я написал API с ASP. net ядром, и я хочу получить данные из него с помощью Flutter, но мой код содержит ошибку, подобную этой: E / flutter (10049): [ОШИБКА: flutter / lib / ui / ui_dart_state. cc (157)] Необработанное исключение: HandshakeException: ошибка рукопожатия в клиенте (ошибка ОС: E / flutter (10049): CERTIFICATE_VERIFY_FAILED: невозможно получить сертификат локального эмитента (рукопожатие. cc: 354)) E / flutter (10049): # 0 IOClient.send (пакет: http / src / io_client.dart: 33: 24) E / flutter (10049): E / flutter (10049): # 1 BaseClient._sendUnstreamed (пакет: http / src / base_client.dart: 176: 38) E / flutter (10049): # 2 BaseClient.get (пакет: http / src / base_client.dart: 35: 7) E / flutter (10049): # 3 get. (пакет: http / http.dart: 46: 36) E / flutter (10049): # 4 _withClient (пакет: http / http.dart: 166: 20) E / flutter (10049): # 5 get (пакет: http /http.dart:46:5) E / flutter (10049): # 6 APIServices.fetchStudent (пакет: aspapi / models / api.services.dart: 9: 12) E / flutter (10049): # 7 _StudentsState.getStudents (пакет: aspapi / ui / Students.dart: 17: 19) E / flutter (10049): # 8 _StudentsState.build (пакет: aspapi / ui / Students.dart: 32: 5) E / flutter (10049): # 9 StatefulElement.build (пакет: flutter / src / widgets / framework.dart: 4619: 28) E / flutter (10049): # 10 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4502: 15) E / flutter (10049): # 11 StatefulElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4675: 11) E / flutter (10049): # 12 Element.rebuild (пакет: flutter / src / widgets / framework.dart: 4218: 5) E / flutter (10049): # 13 ComponentElement._firstBuild (пакет: flutter / src / widgets / framework.dart: 4481: 5) E / flutter (10049): # 14 StatefulElement._firstBuild ( пакет: трепетание / SRC / WID gets / framework.dart: 4666: 11) E / flutter (10049): # 15 ComponentElement.mount (пакет: flutter / src / widgets / framework.dart: 4476: 5) E / flutter (10049): # 16 Элемент. inflateWidget (пакет: flutter / src / widgets / framework.dart: 3446: 14) E / flutter (10049): # 17 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 3214: 18) E / flutter (10049): # 18 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4527: 16) E / flutter (10049): # 19 Element.rebuild (пакет: flutter / src / widgets / framework.dart : 4218: 5) E / flutter (10049): # 20 ComponentElement._firstBuild (пакет: flutter / src / widgets / framework.dart: 4481: 5) E / flutter (10049): # 21 ComponentElement.mount (пакет: flutter /src/widgets/framework.dart:4476:5) E / flutter (10049): # 22 Element.inflateWidget (пакет: flutter / src / widgets / framework.dart: 3446: 14) E / flutter (10049): # 23 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 3214: 18) E / flutter (10049): # 24 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4527: 16) E / flutter (10049): # 25 Element.rebuild (пакет: flutter / src / widgets / framework.dart: 4218: 5) E / flutter (10049): # 26 ComponentElement._firstBuild ( пакет: flutter / src / widgets / framework.dart: 4481: 5) E / flutter (10049): # 27 ComponentElement.mount (пакет: flutter / src / widgets / framework.dart: 4476: 5) E / flutter (10049 ): # 28 Element.inflateWidget (пакет: flutter / src / widgets / framework.dart: 3446: 14) E / flutter (10049): # 29 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 3214 : 18) E / flutter (10049): # 30 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4527: 16) E / flutter (10049): # 31 Element.rebuild (пакет: flutter / src /widgets/framework.dart:4218:5) E / flutter (10049): # 32 ComponentElement._firstBuild (пакет: flutter / src / widgets / framework.dart: 4481: 5) E / flutter (10049): # 33 ComponentElement .mount (пакет: flutter / src / widgets / framework.dart: 4476: 5) E / flutter (10049): # 34 Element.inflateWidget (пакет: flutter / src / widgets / framework.dart : 3446: 14) E / flutter (10049): # 35 MultiChildRenderObjectElement.mount (пакет: flutter / src / widgets / framework.dart: 5947: 32) E / flutter (10049): # 36 Element.inflateWidget (пакет: flutter / src / widgets / framework.dart: 3446: 14) E / flutter (10049): # 37 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 3214: 18) E / flutter (10049): # 38 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4527: 16) E / flutter (10049): # 39 StatefulElement.performRebuild ( пакет: flutter / src / widgets / framework.dart: 4675: 11) E / flutter (10049): # 40 Element.rebuild (пакет: flutter / src / widgets / framework.dart: 4218: 5) E / flutter (10049 ): # 41 ComponentElement._firstBuild (пакет: flutter / src / widgets / framework.dart: 4481: 5) E / flutter (10049): # 42 StatefulElement._firstBuild (пакет: flutter / src / widgets / framework.dart: 4666 : 11) E / flutter (10049): # 43 ComponentElement.mount (пакет: flutter / src / widgets / framework.dart: 4476: 5) E / flutter (10049): # 44 Element.inflateWidget (пакет: flutter / src /widgets/framework.dart:3446:14) E / flutter (10049): # 45 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 3214: 18) E / flutter (10049): # 46 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4527 Отладка прослушивания службы на ws: //127.0.0.1: 8773 / 6hBnRZt2y-g = / ws Синхронизация файлов на устройстве Android SDK, созданный для x86 ... E / флаттер (10049): [ОШИБКА: флаттер / оболочка / общий / оболочка. cc (202)] Ошибка дротика: необработанное исключение: E / флаттер (10049): исключение HandshakeException: Ошибка рукопожатия в клиенте (ошибка ОС: E / flutter (10049): CERTIFICATE_VERIFY_FAILED: невозможно получить сертификат локального эмитента (рукопожатие. cc: 354)) E / flutter (10049): # 0 IOClient.send (пакет: http / src / io_client.dart: 33: 24) E / flutter (10049): E / flutter (10049): # 1 BaseClient._sendUnstreamed (пакет: http / src / base_client.dart: 176: 38) E / flutter (10049) : # 2 BaseClient.get (пакет: http / src / base_client.dart: 35: 7) E / flutter (10049): # 3 get. (пакет: http / http.dart: 46: 36) E / flutter (10049): # 4 _withClient (пакет: http / http.dart: 166: 20) E / flutter (10049): # 5 get (пакет: http /http.dart:46:5) E / flutter (10049): # 6 APIServices.fetchStudent (пакет: aspapi / models / api.services.dart: 9: 12) E / flutter (10049): # 7 _StudentsState.getStudents (пакет: aspapi / ui / Students.dart: 17: 19) E / flutter (10049): # 8 _StudentsState.build (пакет: aspapi / ui / Students.dart: 32: 5) E / flutter (10049): # 9 StatefulElement.build (пакет: flutter / src / widgets / framework.dart: 4619: 28) E / flutter (10049): # 10 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4502: 15) E / flutter (10049): # 11 StatefulElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4675: 11) E / flutter (10049): # 12 Element.rebuild (пакет: flutter / src / widgets / framework.dart: 4218: 5) E / flutter (10049): # 13 StatefulElement.update (пакет: flutter / src / widgets / framework.dart: 4707: 5) E / flutter (10049): # 14 Element.updateChild ( пакет: трепетание / SRC / виджеты / рамки .dart: 3201: 15) E / flutter (10049): # 15 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4527: 16) E / flutter (10049): # 16 Element.rebuild (пакет : flutter / src / widgets / framework.dart: 4218: 5) E / flutter (10049): # 17 StatelessElement.update (пакет: flutter / src / widgets / framework.dart: 4583: 5) E / flutter (10049) : # 18 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 3201: 15) E / flutter (10049): # 19 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4527: 16) E / flutter (10049): # 20 Element.rebuild (пакет: flutter / src / widgets / framework.dart: 4218: 5) E / flutter (10049): # 21 ProxyElement.update (пакет: flutter / src / widgets / framework.dart: 4862: 5) E / flutter (10049): # 22 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 3201: 15) E / flutter (10049): # 23 ComponentElement. executeRebuild (пакет: flutter / src / widgets / framework.dart: 4527: 16) E / flutter (10049): # 24 Element.rebuild (пакет: flutter / src / widgets / framework.dart: 4218: 5) E / трепетание (10049): # 25 ProxyElement. обновление (пакет: flutter / src / widgets / framework.dart: 4862: 5) E / flutter (10049): # 26 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 3201: 15) E / flutter (10049): # 27 RenderObjectElement.updateChildren (пакет: flutter / src / widgets / framework.dart: 5522: 32) E / flutter (10049): # 28 MultiChildRenderObjectElement.update (пакет: flutter / src / widgets / framework.dart : 5957: 17) E / flutter (10049): # 29 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 3201: 15) E / flutter (10049): # 30 ComponentElement.performRebuild (пакет: flutter /src/widgets/framework.dart:4527:16) E / flutter (10049): # 31 StatefulElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4675: 11) E / flutter (10049): # 32 Element.rebuild (пакет: flutter / src / widgets / framework.dart: 4218: 5) E / flutter (10049): # 33 StatefulElement.update (пакет: flutter / src / widgets / framework.dart: 4707: 5) E / flutter (10049): # 34 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 3201: 15) E / flutter (10049): # 35 Co mponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4527: 16) E / flutter (10049): # 36 Element.rebuild (пакет: flutter / src / widgets / framework.dart: 4218: 5) E / flutter (10049): # 37 ProxyElement.update (пакет: flutter / src / widgets / framework.dart: 4862: 5) E / flutter (10049): # 38 Element.updateChild (пакет: flutter / src / widgets / framework .dart: 3201: 15) E / flutter (10049): # 39 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4527: 16) E / flutter (10049): # 40 StatefulElement.performRebuild (пакет : flutter / src / widgets / framework.dart: 4675: 11) E / flutter (10049): # 41 Element.rebuild (пакет: flutter / src / widgets / framework.dart: 4218: 5) E / flutter (10049) : # 42 StatefulElement.update (пакет: flutter / src / widgets / framework.dart: 4707: 5) E / flutter (10049): # 43 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 3201: 15) E / flutter (10049): # 44 SingleChildRenderObjectElement.update (пакет: flutter / src / widgets / framework.dart: 5837: 14) E / flutter (10049): # 4 5 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 3201: 15) E / flutter (10049): # 46 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 4527: 16

Я установил разрешение Inte rnet, изменил IP, но ничего не работает, это мой код:

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);
  }
}

1 Ответ

1 голос
/ 31 марта 2020

Сначала вы должны изменить IIS Express на имя своего проекта, а затем создать файл xml в этом каталоге: android -> app -> sr c -> main -> res -> xml name этого файла - network_security_config. xml после этого скопируйте эти коды в файл:

<?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>

Затем в файле манифеста добавьте этот код в тег приложения:

android:networkSecurityConfig="@xml/network_security_config"

следующим образом:

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

Затем вы можете использовать пакет Dio следующим образом:

  static Future fetchStudent() async{
    Dio dio = Dio();
    (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
    (HttpClient 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;
  }

Готово: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...