Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Https 使用Http绕过证书错误_Https_Dart - Fatal编程技术网

Https 使用Http绕过证书错误

Https 使用Http绕过证书错误,https,dart,Https,Dart,我正在尝试创建一个访问第三方API的代理服务器,但它们的开发端点有证书错误。在使用http.dart时,是否有绕过ssl错误的方法 import 'package:http/http.dart' as http; Uri url = Uri.parse("https://url-with-ssl-error.com/endpoint"); http.get(url).then((response) => print(response.body)); 下面是返回的错误: Uncaught

我正在尝试创建一个访问第三方API的代理服务器,但它们的开发端点有证书错误。在使用http.dart时,是否有绕过ssl错误的方法

import 'package:http/http.dart' as http;

Uri url = Uri.parse("https://url-with-ssl-error.com/endpoint");
http.get(url).then((response) => print(response.body));
下面是返回的错误:

Uncaught Error: SocketIOException: RawSecureSocket error (Unexpected handshake error in client) (OS Error: errno = -8172)
Unhandled exception:
SocketIOException: RawSecureSocket error (Unexpected handshake error in client) (OS Error:  errno = -8172)
#0      _FutureImpl._scheduleUnhandledError.<anonymous closure> (dart:async/future_impl.dart:207:9)
#1      Timer.run.<anonymous closure> (dart:async/timer.dart:17:21)
#2      Timer.run.<anonymous closure> (dart:async/timer.dart:25:13)
#3      Timer.Timer.<anonymous closure> (dart:async-patch:15:15)
#4      _Timer._createTimerHandler._handleTimeout (dart:io:6990:28)
#5      _Timer._createTimerHandler._handleTimeout (dart:io:6998:7)
#6      _Timer._createTimerHandler.<anonymous closure> (dart:io:7006:23)
#7      _ReceivePortImpl._handleMessage (dart:isolate-patch:81:92)
Uncaught错误:SocketIOException:RawSecureSocket错误(客户端出现意外握手错误)(操作系统错误:errno=-8172)
未处理的异常:
SocketIOException:RawSecureSocket错误(客户端出现意外握手错误)(操作系统错误:errno=-8172)
#0 \u FutureImpl.\u计划未处理错误。(dart:async/future\u impl.dart:207:9)
#1.运行计时器。(dart:async/timer.dart:17:21)
#2.运行。(dart:async/timer.dart:25:13)
#定时器,定时器。(dart:异步修补程序:15:15)
#4(计时器)(创建计时器句柄)(dart:io:6990:28)
#5(计时器)(创建计时器句柄)(dart:io:6998:7)
#6 _定时器。_createTimerHandler。(dart:io:7006:23)
#7_ReceivePortImpl._handleMessage(dart:隔离补丁:81:92)

错误-8172表示“对等方的证书颁发者已被用户标记为不受信任。”

如果您有权访问原始套接字,则该方法允许您通过提供
onBadCertificate
回调来指定在出现坏证书的情况下要做什么。但是,我不确定您的代码示例中的
http
对象的确切类型,因此我无法判断您是否可以解决这个问题。我认为它可能是一个
HttpClient
实例,但它没有一个
get
方法,该方法需要一个URI,所以我不确定。如果它是您自己的类,那么您可能可以访问底层的安全套接字,这样您仍然可以使用
onBadCertificate


此外,对于服务器套接字,您不能依赖隐式调用。你需要这样做。

尽管这个问题可能已经过时了,但我还是应该发布一个简短的答案,以防有人遇到同样的麻烦。此代码段来自我的项目:

import 'package:http/http.dart' as http;
import 'package:http/io_client.dart';
...

HttpClient client = new HttpClient()..badCertificateCallback = ((X509Certificate cert, String host, int port) => true);
var ioClient = new IOClient(client);
http.Response resp = await ioClient.post(uri, body: utf8.encode(json.encode(body)), headers: headers);
...

提到了这个问题,也提到了修复方法。

你能显示代码的相关部分和确切的错误吗?@ZdeslavVojkovic我已经用代码编辑了我的问题,返回了错误,添加了
SecureSocket.initialize()
get
之前。请参阅,http的类型是什么?我快速查看了http包,但没有看到控制坏证书的方法。您可以在请求http包的功能。谢谢