connectionFactory 属性

void connectionFactory=(Future<ConnectionTask<Socket>> f(Uri url, String? proxyHost, int? proxyPort)?)

设置用于创建套接字连接的函数。

请求的 URL(例如通过 getUrl)和代理配置(代码中的 f.proxyHostf.proxyPort)作为参数传递。如果连接不是通过代理进行,则 f.proxyHostf.proxyPort 将是 null

由于连接可能会根据主机和端口进行重用,因此当 f.proxyHostf.proxyPort 不是 null 时,该函数不应忽略它们。如果返回的 Socket 对于代理没有意义,可以设置 findProxy 以使用直接连接。

例如

import "dart:io";

void main() async {
  HttpClient client = HttpClient()
    ..connectionFactory = (Uri uri, String? proxyHost, int? proxyPort) {
        assert(proxyHost == null);
        assert(proxyPort == null);
        var address = InternetAddress("/var/run/docker.sock",
            type: InternetAddressType.unix);
        return Socket.startConnect(address, 0);
    }
    ..findProxy = (Uri uri) => 'DIRECT';

  final request = await client.getUrl(Uri.parse("http://ignored/v1.41/info"));
  final response = await request.close();
  print(response.statusCode);
  await response.drain();
  client.close();
}

实现

void set connectionFactory(
    Future<ConnectionTask<Socket>> Function(
            Uri url, String? proxyHost, int? proxyPort)?
        f);