【问题标题】:Flutter web http request badCertificateCallbackFlutter web http请求badCertificateCallback
【发布时间】:2020-08-08 05:11:06
【问题描述】:

我想知道您是否可以将我指向具有 http badCertificateCallback 的网络颤振库。我试过DIO,但它给了我一个错误并提交了一个问题,但我还没有收到他们的消息

DIO 代码:

Dio dio = new Dio(options);
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
};

Error: Expected a value of type 'DefaultHttpClientAdapter', but got one of type 'BrowserHttpClientAdapter'

我也试过http,但它没有错误的证书回调,我们可以使用它,但它不兼容网络

HttpClient httpClient = new HttpClient();
    httpClient.badCertificateCallback =
        ((X509Certificate cert, String host, int port) => true);
    IOClient ioClient = new IOClient(httpClient);
response = await ioClient.post(url, body: data, headers: headers);

任何评论都会更有价值。

提前致谢, 丹尼尔

【问题讨论】:

  • 那将是一个可怕的安全漏洞。如果您想暂时接受自签名证书,请将其添加到浏览器的受信任证书中。
  • 嗨,@DanielHernandez 我和你有同样的问题,你找到解决问题的方法了吗?
  • 嗨,有 sema 问题。已经有解决方案了吗?

标签: http flutter flutter-web dio


【解决方案1】:

你可以把你的这部分变成这个?

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

【讨论】:

    【解决方案2】:

    我以这种方式将badCertificateCallback 与 DIO 一起使用:

    //import 'package:get/get.dart' hide Response hide FormData; //<-- if you use get package
    import 'package:dio/dio.dart';
    
    void main(){
      HttpOverrides.global = new MyHttpOverrides();
      runApp(MyApp());
    }
    
    class MyHttpOverrides extends HttpOverrides{
      @override
      HttpClient createHttpClient(SecurityContext context){
        return super.createHttpClient(context)
          ..badCertificateCallback = ((X509Certificate cert, String host, int port) {
            final isValidHost = ["192.168.1.67"].contains(host); // <-- allow only hosts in array
            return isValidHost;
          });
      }
    }
    
    // more example: https://github.com/flutterchina/dio/tree/master/example
    void getHttp() async {
      Dio dio = new Dio();
      Response response;
      response = await dio.get("https://192.168.1.67");
      print(response.data);
    }
    

    【讨论】:

      【解决方案3】:

      像这样做一个http客户端,

      import 'dart:convert';
      import 'dart:io';
      import 'package:dio/adapter.dart';
      import 'package:dio/dio.dart';
      import 'package:flutter/foundation.dart';
      import 'dart:io' as IO;
      ....
      ....
      ....
      /// CLIENT
      static Future<Dio> _dioClient() async {
      
      Dio dio = Dio(await _getOptions()); // Getting Headers and Other data
      
      if(!kIsWeb){
        (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
            (IO.HttpClient client) {
          client.badCertificateCallback =
              (X509Certificate cert, String host, int port) => true;
          return client;
        };
      }
      return dio;                                                             
      }
      

      【讨论】:

        猜你喜欢
        • 2021-03-12
        • 2021-03-31
        • 2020-08-13
        • 2021-07-07
        • 2019-10-02
        • 2021-05-19
        • 2019-12-11
        • 2020-02-21
        • 2019-06-19
        相关资源
        最近更新 更多