HttpClient с несколькими прокси - PullRequest
0 голосов
/ 22 сентября 2018

Как можно использовать HttpClient с конвейером из нескольких прокси?

Один прокси может быть обработан через HttpClientHandler:

HttpClient client1 = new HttpClient(new HttpClientHandler()
        {
            Proxy = new WebProxy()
            {
                Address = new Uri($"http://{proxyIp}:{proxyPort}"),
                BypassProxyOnLocal = false,
                UseDefaultCredentials = false
            }
        });

Я хочу, чтобы запросы проходили черезнесколько прокси.

Я уже пытался создать подкласс DelegatingHandler следующим образом:

public class ProxyDelegatingHandler : DelegatingHandler
{
    public ProxyDelegatingHandler(string proxyIp, int proxyPort):
        base(new HttpClientHandler()
        {
            Proxy = new WebProxy()
            {
                Address = new Uri($"http://{proxyIp}:{proxyPort}"),
                BypassProxyOnLocal = false,
                UseDefaultCredentials = false
            }
        })
    {        

    }

    protected override Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request, CancellationToken cancellationToken)
    {                            
        return base.SendAsync(request, cancellationToken);
    }
}

И передать список на фабрику, но он выдает исключение, которое, вероятно, вызвано неправильной реализацией ProxyDelegatingHandler:

    var handlers = new List<DelegatingHandler>();      
    handlers.Add(new ProxyDelegatingHandler(ip1, port2));
    handlers.Add(new ProxyDelegatingHandler(ip2, port2));
    HttpClient client = HttpClientFactory.Create(handlers.ToArray())
    HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, url);                        
    var res = await client.SendAsync(requestMessage);

Исключение:

Список 'DelegatingHandler' недействителен, поскольку свойство 'InnerHandler' в CustomHandler не равно нулю.Parametername: handlers

Похожие сообщения: ссылка

...