4

次の例外:

SocketIOException: Unexpected handshake error in client (OS Error: errno = -12268)
#0      _SecureFilterImpl.handshake (dart:io-patch:849:8)
#1      _SecureSocket._secureHandshake (dart:io:7382:28)
#2      _SecureSocket._secureConnectHandler._secureConnectHandler (dart:io:7294:21)
#3      _Socket._updateOutHandler.firstWriteHandler (dart:io-patch:773:64)
#4      _SocketBase._multiplex (dart:io-patch:408:26)
#5      _SocketBase._sendToEventHandler.<anonymous closure> (dart:io-patch:509:20)
#6      _ReceivePortImpl._handleMessage (dart:isolate-patch:37:92)

次のコードの結果:

String url = "https://www.google.com";
HttpClient client = new HttpClient();
HttpClientConnection conn = client.getUrl(new Uri(url));
conn.onResponse = (HttpClientResponse resp) {
  print ('content length ${resp.contentLength}');
  print ('status code ${resp.statusCode}');
  InputStream input = resp.inputStream;
  input.onData = () {
    print(codepointsToString(input.read()));
  };
  input.onClosed = () {
    print('closed!');
    client.shutdown();
  };
};

URLを「https」ではなく「http」に置き換えると、期待どおりに機能することに注意してください。

バグレポートはこちら。

4

2 に答える 2

3

更新: Dart バージョン >= 1.12 については、William Hesse の回答を参照してください。


と同じエラーがありDart SDK version 0.2.9.9_r16323ます。問題 7541では:

セキュア ネットワーキングを使用する前に、SecureSocket ライブラリを明示的に初期化する必要があります。初めて使用するときに自動的に初期化されるように取り組んでいますが、まだコミットされていません。デフォルトのルート証明書 (よく知られている認証局) だけを使用するにSecureSocket.initialize() は、ネットワークを行う前に main() ルーチンを呼び出します。

したがって、SecureSocket.initialize()コードの前に追加することで、期待どおりに機能します。

r16384以降、この明示的な初期化はオプションです

SecureSocket.initialize()はオプションになりました。呼び出さない場合は、パラメーターなしで呼び出した場合と同じです。明示的に呼び出す場合は、安全な接続を作成する前に一度だけ呼び出す必要があります。サーバー ソケットを作成する場合は、証明書データベースとキー データベースのパスワードが必要なため、明示的に呼び出す必要があります。

于 2012-12-20T07:37:36.840 に答える