findProxyFromEnvironment 静态方法

String findProxyFromEnvironment(
  1. Uri url,
  2. {Map<String, String>? environment}
)

用于从通过环境变量指定的代理配置中解析用于 HTTP 连接的代理服务器的函数。

以下环境变量会被考虑

http_proxy
https_proxy
no_proxy
HTTP_PROXY
HTTPS_PROXY
NO_PROXY

http_proxyHTTP_PROXY 指定了用于 http:// urls 的代理服务器。使用格式 hostname:port。如果没有使用端口号,将默认使用 1080。如果两者都已设置,则小写字符串将具有优先权。

https_proxyHTTPS_PROXY 指定了用于 https:// urls 的代理服务器。使用格式 hostname:port。如果没有使用端口号,将默认使用 1080。如果两者都已设置,则小写字符串将具有优先权。

no_proxyNO_PROXY 指定了一组以逗号分隔的主机名后缀列表,对于这些主机名不应使用代理服务器。例如,值 "localhost,127.0.0.1" 将使对 "localhost" 和 "127.0.0.1" 的请求不使用代理。如果两者都已设置,则小写字符串将具有优先权。

要激活这种方式解析代理,将此函数分配给 findProxy 属性上的 HttpClient

HttpClient client = HttpClient();
client.findProxy = HttpClient.findProxyFromEnvironment;

如果您不想使用系统环境,可以封装一个不同的函数。

HttpClient client = HttpClient();
client.findProxy = (url) {
  return HttpClient.findProxyFromEnvironment(
      url, environment: {"http_proxy": ..., "no_proxy": ...});
}

如果代理需要认证,还可以配置用户名和密码。使用格式 username:password@hostname:port 以包括用户名和密码。或者可以使用 API addProxyCredentials 为需要认证的代理设置凭据。

实现

static String findProxyFromEnvironment(Uri url,
    {Map<String, String>? environment}) {
  HttpOverrides? overrides = HttpOverrides.current;
  if (overrides == null) {
    return _HttpClient._findProxyFromEnvironment(url, environment);
  }
  return overrides.findProxyFromEnvironment(url, environment);
}