Dart 的 findProxy 需要的是路由指令
从 dart:io HttpClient.findProxy 返回 PROXY host:port 指令,并有意识地选择直连回退。
dart:io 的 HttpClient 通过 findProxy 接受代理决定。回调返回一条 PAC 风格的指令:
import 'dart:io';
final client = HttpClient()
..findProxy = (_) => 'PROXY proxy.example.net:8080';
把这个客户端用于应用的请求。返回 http://proxy.example.net:8080 对这个回调来说是错误格式;受支持的形式是 PROXY 后接主机和端口。对于被允许的公开请求,从HTTP 代理列表取一个 HTTP 候选,并按该指令格式化。
回调会收到目标 URI,因此可以为有意的绕过返回 DIRECT。像 PROXY proxy.example.net:8080; DIRECT 这样的结果也允许在代理不可用时直连回退。不需要这种回退时就省略 DIRECT。
没有 findProxy 函数时,这个 API 使用直连。希望按环境选择的应用可以改为把 HttpClient.findProxyFromEnvironment 赋给回调。
这适用于在受支持的本地平台上使用 dart:io 的 Flutter 代码。Flutter Web 的请求使用浏览器的网络设施,需要浏览器的代理策略。