Изпращане на .NET HttpClient заявки през прокси
Настройте WebProxy в HttpClientHandler и избегнете изключено прокси маршрутизиране или свързване към грешния клиент.
Заявката трябва да използва HttpClient, създаден с вашия прокси обработчик. Създаването на несвързан обект WebProxy не променя маршрута на друг клиент.
using System;
using System.Net;
using System.Net.Http;
var proxy = new WebProxy("http://203.0.113.10:8080")
{
BypassProxyOnLocal = false
};
using var handler = new HttpClientHandler
{
Proxy = proxy,
UseProxy = true
};
using var client = new HttpClient(handler)
{
Timeout = TimeSpan.FromSeconds(15)
};
using var response = await client.GetAsync("https://example.com/");
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(await response.Content.ReadAsStringAsync());Заменете документационния адрес с реално HTTP прокси от услугата си или от списъка с HTTP проксита. Този синтаксис от най-горно ниво е подходящ за съвременен C# конзолен проект; по-старите проекти могат да поставят инструкциите в асинхронен Main.
Проверете и двете свойства на обработчика: Proxy избира крайната точка, а UseProxy=true включва използването ѝ. Ако точката работи отделно, но не в приложението, потвърдете, че никой код не изключва UseProxy и че извикването използва този екземпляр. Специалният обработчик избягва зависимостта от откриване чрез процеса или ОС.
Когато операторът даде акаунт, задайте NetworkCredential на свойството WebProxy.Credentials. Authorization на сайта служи за друга стъпка, а публичен IP:port запис не дава вход по подразбиране. Слушател http:// може да пренася HTTPS чрез тунел; запазете нормалната проверка на целта.
Тази кратка програма освобождава обектите при изход. За повтарящи се извиквания следвайте .NET насоките за живота на клиента и запазете клиента/обработчика за натоварването, вместо да изграждате наново пуловете за всяка заявка. Проверете върнатия статус: работещ прокси път може да пренася отказ от сайта.