1. FlurlExtensionMethod
public static class FlurlExtensionMethod
{
/// <summary>
/// 创建一个新的带代理的FlurlRequest,并将其配置为使用给定的IFlurlClient。
/// </summary>
/// <param name="uri"></param>
/// <param name="proxyAddress">代理地址。默认为null,不走代理</param>
/// <returns>新的IFlurlRequest。</returns>
public static IFlurlRequest WithProxy(this Uri uri, string proxyAddress = null)
{
var result = uri.WithClient(new FlurlClient().Configure(x =>
{
x.HttpClientFactory = new ProxyHttpClientFactory(proxyAddress);
}));
return result;
}
/// <summary>
/// 创建一个新的带代理的FlurlRequest,并将其配置为使用给定的IFlurlClient。
/// </summary>
/// <param name="url"></param>
/// <param name="proxyAddress">代理地址。默认为null,不走代理</param>
/// <returns>新的IFlurlRequest。</returns>
public static IFlurlRequest WithProxy(this Url url, string proxyAddress = null)
{
return new Uri(url).WithProxy(proxyAddress);
}
/// <summary>
/// 创建一个新的带代理的FlurlRequest,并将其配置为使用给定的IFlurlClient。
/// </summary>
/// <param name="url"></param>
/// <param name="proxyAddress">代理地址。默认为null,不走代理</param>
/// <returns>新的IFlurlRequest。</returns>
public static IFlurlRequest WithProxy(this string url, string proxyAddress = null)
{
return new Uri(url).WithProxy(proxyAddress);
}
}
2. ProxyHttpClientFactory
public class ProxyHttpClientFactory : DefaultHttpClientFactory
{
private readonly string _address;
public ProxyHttpClientFactory(string address)
{
_address = address;
}
public override HttpMessageHandler CreateMessageHandler()
{
return new HttpClientHandler
{
Proxy = string.IsNullOrWhiteSpace(_address) ? new WebProxy() : new WebProxy(_address),
UseProxy = !string.IsNullOrWhiteSpace(_address)
};
}
}
3. 用法
url.WithProxy()......
注意!
注意:不能和 WithClient()
同时使用