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() 同时使用