Wysyłanie żądań .NET HttpClient przez proxy
Skonfiguruj WebProxy w HttpClientHandler i uniknij wyłączonego routingu proxy lub przypisania go do niewłaściwego klienta.
Żądanie musi używać HttpClient utworzonego z twoim programem obsługi proxy. Utworzenie niezwiązanego obiektu WebProxy nie zmienia trasy innego klienta.
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());Zastąp adres dokumentacyjny rzeczywistym proxy HTTP z usługi lub listy proxy HTTP. Ta składnia najwyższego poziomu pasuje do nowoczesnego projektu konsolowego C#; starsze projekty mogą umieścić instrukcje w asynchronicznym Main.
Sprawdź obie właściwości handlera: Proxy wybiera punkt końcowy, a UseProxy=true włącza jego użycie. Jeśli punkt działa osobno, lecz nie w aplikacji, upewnij się, że żaden kod nie wyłącza UseProxy i że wywołanie używa tej instancji. Dedykowany handler uniezależnia od wykrywania przez proces lub system operacyjny.
Gdy operator proxy udostępnia konto, przypisz NetworkCredential do właściwości WebProxy.Credentials. Authorization witryny dotyczy innego etapu, a publiczny wpis IP:port nie dostarcza domyślnych danych logowania. Listener http:// może przenosić HTTPS tunelem; zachowaj zwykłą weryfikację celu.
Ten krótki program zwalnia obiekty przy wyjściu. Przy wielokrotnych wywołaniach usługi przestrzegaj zaleceń .NET dotyczących czasu życia klienta i zachowaj klienta/handler dla obciążenia, zamiast odbudowywać pule połączeń przy każdym żądaniu. Sprawdź zwrócony status: działająca trasa proxy nadal może przenieść odmowę witryny.