using var handler = new HttpClientHandler
{
    UseProxy = true,
    Proxy = new WebProxy("http://proxy.example:8080")
};
using var client = new HttpClient(handler);

string html = await client.GetStringAsync(
    "https://www.example.com/catalog");
var document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(html);

Ten nowoczesny fragment .NET używa System.Net i System.Net.Http. Skonfigurowany klient obsługuje routing sieciowy, a Html Agility Pack otrzymuje zwrócony ciąg HTML. Zachowaj odpowiednio skonfigurowanego klienta do bieżącej pracy, zamiast odbudowywać jego pule dla każdej strony.

W tym przykładzie strony publicznej nieuwierzytelniony kandydat z listy proxy HTTP może zastąpić pośrednika. Zastąp cel osobno. Adres URL witryny zachowuje swoją tożsamość TLS. Uwierzytelnione dane logowania proxy należą do WebProxy; nie zastępują ich ani dane witryny, ani wyłączona weryfikacja.

GetStringAsync traktuje nieudane statusy HTTP jako błędy. Nie zamieniaj nieudanego pobrania na pusty HtmlDocument. Jeśli aplikacja potrzebuje nagłówków, szczegółów statusu lub treści błędu, użyj operacji HTTP zorientowanej na odpowiedź i sprawdź ją przed analizą.

Metoda ciągu unika bezwarunkowej dodatkowej konwersji surowych bajtów na UTF-8. Jeśli świadomie pobierasz bajty, przenieś wymagania dotyczące kodowania odpowiedzi i dokumentu do dekodowania.

LoadHtml tworzy przeanalizowany dokument; nie wykonuje skryptów, nie ładuje stylów ani nie podąża za linkami. Rozwiązuj kolejne linki względne względem lokalizacji odpowiedzi i pamiętaj, że elementy renderowane przez przeglądarkę mogą nie występować w pobranym źródle. Każda odpowiedź powinna tworzyć własny dokument, nawet gdy żądania współdzielą tego samego skonfigurowanego klienta HTTP.

Powiązane artykuły