6

我想知道您是否可以将我指向具有 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);

任何评论都会更有价值。

在此先感谢,丹尼尔

4

3 回答 3

2

像这样制作一个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-08-18T07:52:53.967 回答
0

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);
}
于 2021-04-06T07:05:58.870 回答
0

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

 HttpClient client = new HttpClient();
  client.badCertificateCallback =((X509Certificate cert, String  host, int port) => true);
于 2021-03-26T23:47:13.273 回答