var client = clients.GetOrAdd(
    "proxy-east",
    "https://example.com",
    builder => builder.ConfigureInnerHandler(handler =>
        handler.Proxy = new WebProxy("http://203.0.113.10:8080")));

这里的 clients 是 Flurl 4 的 IFlurlClientCache。在查找之前选好路由,并给它的可复用客户端一个稳定的名字。对于获准的公开请求,HTTP 代理列表 为内部 handler 的 WebProxy URL 提供候选。用新的代理值复用 proxy-east 并不是对已经保存在那里的客户端做逐请求的重新配置。

使用与应用所选类型匹配的 handler API;Flurl 为 SocketsHttpHandler 记录了另一条配置路径。

把选定的路由放在操作元数据里,并通过对应的客户端调用。每次查询工厂时都随机选择,否则可能让同一个逻辑任务得到不一致的策略。

在应用范围内拥有该缓存并限制其增长。不断变化的临时代理列表可能累积客户端和资源;名字和日志应使用安全的路由标识符,而不是内嵌的密码。

这里使用的是 Flurl 4 的命名缓存接口,而不是复制旧的自定义工厂基础设施,也不是 在另一个请求进行中更换正在使用的 handler。

相关文章