Как можно использовать 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
Похожие сообщения: ссылка