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:// url 的代理服务器。使用格式 hostname:port。如果没有使用端口号,将使用默认值 1080。如果两者都设置,则小写字母的优先。

https_proxyHTTPS_PROXY 指定用于 https:// url 的代理服务器。使用格式 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);
}