2013-05-13 4 views
4

Я пытаюсь создать прокси-сервер, который обращается к стороннему API, но их конечная точка разработки имеет ошибку сертификата. Есть ли способ обойти ошибку ssl при использовании http.dart?Ошибка обхода обхода с использованием Http

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) 
+0

Вы можете показать соответствующую часть кода и точную ошибку? –

+0

@ZdeslavVojkovic Я отредактировал свои вопросы с кодом и возвращенной ошибкой –

+0

попробуйте добавить 'SecureSocket.initialize()' before 'get'. см. http://stackoverflow.com/questions/13964492/socketioexception-unexpected-handshake-error-in-client и http://code.google.com/p/dart/issues/detail?id=7541 –

ответ

0

Ошибка -8172 означает, что "Сертификат эмитента PEER была помечена как доверенный пользователь.

Если у вас был доступ к сырым сокетам, то метод connect позволяет указать, что делать в случае плохого сертификата, предоставив onBadCertificate callback. Тем не менее, я не уверен, что такое точный тип объекта http в вашем примере кода, поэтому я не могу сказать, можете ли вы обходить это или нет. Я думал, что это может быть экземпляр HttpClient, но у него нет метода get, который принимает URI, поэтому я не уверен. Если это ваш собственный класс, возможно, у вас есть доступ к базовому защищенному сокету, поэтому вы можете использовать onBadCertificate.

Кроме того, для серверных сокетов вы не можете полагаться на неявный вызов SecureSocket.initialize(). Вам нужно call it explicitly with certificate db info.

+0

К сожалению, http: http://pub.dartlang.org/packages/http –

+0

Я быстро просмотрел пакет http, но я не видел способа контролировать плохой сертификат. –

+0

Вы можете запросить функцию для http-пакета по адресу http://dartbug.com/new. Благодаря! –

Смежные вопросы