findProxyFromEnvironment 静态方法
用于从通过环境变量指定的代理配置中解析用于 HTTP 连接的代理服务器的函数。
以下环境变量会被考虑
http_proxy
https_proxy
no_proxy
HTTP_PROXY
HTTPS_PROXY
NO_PROXY
http_proxy
和 HTTP_PROXY
指定了用于 http:// urls 的代理服务器。使用格式 hostname:port
。如果没有使用端口号,将默认使用 1080。如果两者都已设置,则小写字符串将具有优先权。
https_proxy
和 HTTPS_PROXY
指定了用于 https:// urls 的代理服务器。使用格式 hostname:port
。如果没有使用端口号,将默认使用 1080。如果两者都已设置,则小写字符串将具有优先权。
no_proxy
和 NO_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);
}