connect 静态方法
- dynamic host,
- int port, {
- SecurityContext? context,
- bool onBadCertificate(
- X509Certificate certificate
- void keyLog(
- String line
- List<
String> ? supportedProtocols, - Duration? timeout,
override
构建一个新的安全客户端套接字并将其连接到指定的 host
的 port
。
返回的 Future 将完成于一个已连接并准备好订阅的 SecureSocket。
服务器提供的证书将使用 SecurityContext 对象中设置的受信任证书集进行检查。默认的 SecurityContext 对象包含一组内置的受信任根证书,用于知名的证书颁发机构。
onBadCertificate
是用于不可验证证书的可选处理程序。处理程序将接收到 X509Certificate,可以检查它并决定(或让用户决定)是否接受连接。处理程序应返回 true 以继续 SecureSocket 连接。
keyLog
是一个可选的回调,当与服务器交换新的 TLS 密钥时将被调用。对于每次调用,keyLog
将接收一行文本,格式为 NSS Key Log Format。将这些行写入文件将允许工具(例如 Wireshark)解密通过此套接字发送的内容。这旨在允许对安全套接字进行网络级调试,不应在生产代码中使用。例如
final log = File('keylog.txt');
final socket = await SecureSocket.connect('www.example.com', 443,
keyLog: (line) => log.writeAsStringSync(line, mode: FileMode.append));
supportedProtocols
是一个可选的协议列表(按优先级降序),在 ALPN 协议协商期间使用。示例值是 "http/1.1" 或 "h2"。所选协议可以通过 SecureSocket.selectedProtocol 获取。
timeout
参数用于指定建立连接的最大允许时间。如果 timeout
大于系统级超时持续时间,超时可能早于 timeout
中指定的时间发生。超时后,将抛出 SocketException,并取消所有对 host
的当前连接尝试。
实现
static Future<SecureSocket> connect(host, int port,
{SecurityContext? context,
bool onBadCertificate(X509Certificate certificate)?,
void keyLog(String line)?,
List<String>? supportedProtocols,
Duration? timeout}) {
return RawSecureSocket.connect(host, port,
context: context,
onBadCertificate: onBadCertificate,
keyLog: keyLog,
supportedProtocols: supportedProtocols,
timeout: timeout)
.then((rawSocket) => new SecureSocket._(rawSocket));
}