是否有根据URL (或基本URL)为flurl客户端定义代理的推荐方法?在我找到的关于这个主题的文档和讨论中,我找不到任何东西(比如使用.NET Flurl/HttpClient设置每个请求代理(或旋转代理)),而如何在Flurl中使用代理来处理web请求?似乎设置了会影响所有调用的设置(除非我误解了它)。
在我们的场景中,应用程序调用不同的端点(其他应用程序)。其中一些端点只能通过代理服务器到达,有些可以直接到达。此外,在某些环境(DEV与PREPROD vs PROD)中,相同的端点可能需要或不需要代理,因此配置可以类似于:
开发人员
前PREPROD
戳
在这个场景中,我假设我们需要三个HTTP客户机(X、Y和Z)。为这些客户端配置代理设置的正确方法是什么?
发布于 2022-10-21 15:13:48
我建议创建一个新的HttpClient
工厂,该工厂接受所描述的这里的代理地址,但不是在全局注册它,而是创建一个按描述的这里创建一个FlurlClientFactory
,该这里覆盖FlurlClientFactoryBase
并在缓存密钥处使用代理地址,保证每个代理准确地使用一个FlurlClient
。
public class ProxyFlurlClientFactory : FlurlClientFactoryBase
{
protected override string GetCacheKey(Url url) => GetProxyForUrl(Url url);
// Guaranteed to be called only once per proxy
protected override IFlurlClient Create(Url url) {
var httpFac = new ProxyHttpClientFactory(GetProxyForUrl(Url url));
return new FlurlClient().Configure(settings => settings.HttpClientFactory = httpFac));
}
private string GetProxyForUrl(Url url) => ???; // whatever your rules are to pick the right one
}
这可以在全球范围内登记:
FlurlHttp.Configure(settings => settings.FlurlClientFactory = new ProxyFlurlClientFactory());
或者通过迪型注射,如果你愿意的话。
https://stackoverflow.com/questions/73915343
复制相似问题